我有一个指令,从其父控制器继承范围。该指令是一个覆盖页面三秒的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