我的页面上有一个类似选项卡的 View ,并且有多种事件需要将焦点设置到其中一个选项卡上。 (显示/隐藏 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' );

最佳答案

您可以广播一个事件,也可以拥有在发生此类广播后执行操作的监听器。

您可以使用 $scope.$broadcast('changed-tab', objectSentWithBroadcast) 。第二个参数是您可以选择发送的对象,例如您想要关注的选项卡。

然后你会有一个这样的监听器,你可以在其中选择想要的选项卡:

$scope.$on('changed-tab', function(e, objectSentWithBroadcast) {
   // do something here to select the tab
});

关于angularjs - 单击另一个元素或发生其他事件时设置焦点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16016570/

10-12 03:58
查看更多