我的页面上有一个类似选项卡的视图,并且有各种需要将焦点设置到其中一个选项卡的事件。(显示/隐藏 div 很容易,因为我只使用模型变量。)导致 div 聚焦的事件是单击选项卡标题、数据加载完成和初始加载。我知道在哪里拦截所有这些事件,但我不确定如何告诉其他元素设置焦点(拦截站点都不知道其他元素,只知道模型)。
我环顾四周,但找不到很好的参考。我假设我想收听一些消息并从其他各个位置发布。
如何设置这种类型的消息传递事件?
答案:我在答案的基础上提出了以下指令。它结合了 div 的焦点和显示状态。
newsendApp.directive('showAndFocus', function() {
return {
link: function(scope, element, attr){
scope.$on('SetArticlesListFocus',function() {
if( scope.$eval( attr.showAndFocus ) ) {
$(element).focus();
}
})
scope.$watch(attr.showAndFocus, function(value) {
if( value ) {
$(element).show();
setTimeout( function() { $(element).focus(); }, 0 );
} else {
$(element).hide();
}
})
}
}
});
如果发生可能需要重置焦点的事件,那么我会:$rootScope.$broadcast( 'SetArticlesListFocus' );