我有一個指令,從其父控制器繼承範圍。該指令是一個覆蓋頁面三秒的div元素,然後消失,除非單擊上/下箭頭按鈕。 div元素是一種模態。這是對我的DOM使用超時顯示和隱藏自定義指令元素
HTML
<div ng-show="volumeVisibility">
<display-volume-modal></display-volume-modal>
</div>
默認設置爲false
的代碼。當volumeVisibility === true
時,該指令將出現在點擊按鈕上。到現在爲止還挺好。這些是我在控制器中的兩個功能:
$scope.volumeVisibility = false;
$scope.timer = function(){
console.log("Timer");
$scope.volumeVisibility = false;
};
$scope.displayVolumeModal = function(){
$scope.volumeVisibility = true;
console.log("modal");
};
超時工作並設置$scope.volumeVisibility === false
。但是,div不會從頁面中移除。下面是從該指令的代碼(I已經刪除了不相關部分):
return {
restrict: 'E',
scope: false,
link: function(scope, elem, attrs){
scope.$watch('volumeVisibility', function(newVal, oldVal){
if (newVal === true){
window.setTimeout(scope.timer, 3000);
document.addEventListener('keydown', function(e){
//stuff
switch (e.which) {
case 38:
//stuff
break;
case 40:
//stuff
break;
}
});
}
}, true);
},
templateUrl: 'public/templates/displayVolumeModal.html'
}
我試圖將每個功能進指令或控制器。我可以採取什麼步驟使此指令DIV元素在超時後消失?
你能提供'scope.timer'函數體嗎? –
從第一眼便可以想到:嘗試將'ng-show'放在'display-volume-modal'內並擺脫'div' – ZenDD