2015-06-23 42 views
0

我想通過我的控制器來觸發ngShow,它的工作原理,但它並沒有使用,我需要得到一個淡出過渡ngAnimate類。編程方式改變ngShow不使用ngAnimate類

它像它應該,如果我用一個按鈕來切換ngShow,但如果我編程切換它。這是預期的行爲?我可以繞過嗎?

普拉克: http://plnkr.co/edit/swJDP1KBBxcRfK9auYPs?p=preview

<body ng-controller="MainCtrl"> 
    <input type="checkbox" ng-model="visible"> 
    <div ng-show="visible" class="wrap" role="document"> 
     Hello 
    </div> 
    </body> 

 

var app = angular.module("app", ['ngAnimate']); 

app.run(function($rootScope) { 
    $rootScope.visible = false; 
}); 

app.controller('MainCtrl', function($rootScope, $scope) { 
    $rootScope.visible = true; 
}); 

 

.wrap.ng-hide-add-active { 
    display: block!important; 
    transition: 0.5s ease-in-out all; 
} 

.wrap.ng-hide-remove-active { 
    display: block!important; 
    transition: 0.5s ease-in-out all; 
    transition-delay: 0.5s; 
} 

.wrap.ng-hide { 
    opacity: 0; 
} 

回答

0

你運行阻滯和控制器代碼可能得到相同的消化週期,因此沒有按角執行看不到visible變量變化。如果你把你的控制器代碼放在超時時間內,這將工作。例如

app.controller('MainCtrl', function($rootScope, $scope, $timeout) { 
    $timeout(function() { 
    $rootScope.visible = true; 
    }); 
}); 

http://plnkr.co/edit/5IhGE3ol5kI64OlT1e8v?p=preview

+0

我注意到它與超時以及。雖然感覺有點不好意思。沒有其他解決這個問題的方法? – INT

+0

不是我知道是否。我做了一個快速搜索,但只是遇到了相同的答案:http://stackoverflow.com/a/20505571/373655 – rob