微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angularjs – Angular – broadcast,$on在指令中被多次调用

我正在开发一个带有角度的单页应用程序,我需要在2个不同的指令之间进行通信,这些指令基本上没有父子关系.

在指令A中,我有2个地方需要从不同的功能广播相同的事件.在指令B中,已经为此写了一个听众.

现在,我观察到每当callF@R_404_6447@tFunc&第一次调用它的广播,监听器将被调用一次.在后续调用时,监听器被调用两次,三次等等,它继续增加.

callF@R_404_6447@tFunc被执行时调用callSecondFunc,因此对此的监听器也被称为no.在callF@R_404_6447@tFunc中广播的监听器的次数.
那么,为什么听众只被调用一次,为什么多次?它每次都在循环和增加.

指令A:

app.directive("f@R_404_6447@tDir",function ($rootScope) {
    return {
        restrict: 'E',link: function (scope,element,attrs) {
            // some other code
            callF@R_404_6447@tFunc();
            var callF@R_404_6447@tFunc = function(){
                // some other code
                $rootScope.$broadcast("someEvent");
            }
            callSecondFunc();
            var callSecondFunc = function(){
                // some other code
                $rootScope.$broadcast("someEvent");
            }
        }
    };
});

指令B:

app.directive("secondDir",function ($rootScope) {
        return {
            restrict: 'E',attrs) {
                // some other code
                scope.$on("someEvent",function(){
                    detectSTuff();
                }) 
               function detectStuff(){
                  // other code
               }                    
            }
        };
    });

解决方法

我想你忘了取消绑定偶数处理程序.

你可以像下面这样做 –

var someEventHandle = scope.$on("someEvent",function(){
                    detectSTuff();
                });
scope.$on('$destroy',someEventHandle);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐