我有一個指令,用於切換我使用ng-show
的DIV。現在當DIV在5秒後可見時,我希望它淡出。 ng-show
在我的控制器($scope.showPopover
)中使用$scope
變量進行切換,它是一個布爾值,它是true或false。這是我的HTML代碼:
Hello World,我很滿足,但會在5秒後去!
你會發現自定義指令是對兒童的div在我的指令,當我試圖使用它返回由ng-if
生產的註釋的元素。這是我的指令
.directive('fadeAnimation', function ($animate) {
'use strict';
return{
restrict: 'A',
priority: 800,
link: function (scope, element) {
scope.$watch('showPopover', function (newValue) {
console.log(scope.showPopover); // same as scope.showPopover in the controller
if (newValue === true) {
$animate.addClass(element[0].parentNode, 'fade-animiate').then(function() {
$animate.removeClass(element[0].parentNode, 'fade-animiate');
//scope.showPopover = false;
// scope.$apply(); // this produces Error: [$rootScope:inprog] $digest already in progress
});
} else if (newValue === false) {
//scope.showPopover = false;
// scope.$apply(); // this produces Error: [$rootScope:inprog] $digest already in progress
}
});
}
};
});
正如你所看到的,我向父元素中添加和刪除一個CSS類(帶動畫)。完成此操作後,我想將控制器中的scope.showPopover布爾值設置爲false,因爲這樣可以防止我必須雙擊切換彈出窗口的原始鏈接(因爲它是false,我們切換爲true,動畫隱藏但DIV但scope.showPopover
或$scope.showPopover
仍然如此)。我試過在我的指令中設置了scope.showPopover = false
,但是這在控制器中沒有更新。當我嘗試強制一個作用域時。$ apply();我的控制檯出現錯誤,提示Error: [$rootScope:inprog] $digest already in progress
。我究竟做錯了什麼?
我試圖在承諾設置此之後我刪除的CSS類,當我取消scope.showPopover = false
(在newValue === true
條件)的手錶並沒有看到這種變化,手錶打破了我下次切換的$scope.showPopover
風景。似乎沒有任何工作,我認爲我的做法是錯誤的!有任何想法嗎?提前謝謝了!
結合你的代碼來看,似乎您使用的是共享範圍,有一個問題當您使用「showPopover」原語而不是「。」之後,我相信您將成爲原型繼承問題的受害者。使用對象的規則(即「vm.showPopover」)。 – acg 2015-03-02 19:36:44
另一種解決方案是,如果「彈出窗口」具有隔離範圍,則需要通過屬性將基元對象傳遞到指令中。 – acg 2015-03-02 19:43:30