加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 06:58:16 所属栏目:安全 来源:网络整理
导读:我正在开发一个带有角度的单页应用程序,我需要在2个不同的指令之间进行通信,这些指令基本上没有父子关系. 在指令A中,我有2个地方需要从不同的功能广播相同的事件.在指令B中,已经为此写了一个听众. 现在,我观察到每当callFirstFunc第一次调用它的广播,监听器
我正在开发一个带有角度的单页应用程序,我需要在2个不同的指令之间进行通信,这些指令基本上没有父子关系.

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

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

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

指令A:

app.directive("firstDir",function ($rootScope) {
    return {
        restrict: 'E',link: function (scope,element,attrs) {
            // some other code
            callFirstFunc();
            var callFirstFunc = 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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读