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



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

在指令A中,我有两个地方需要从不同的功能广播相同的事件。在指令B中,已经为此编写了一个$on侦听器。

现在,我观察到每当调用FirstFunc&它的广播是第一次被调用的,听众将被调用一次。在随后的调用中,侦听器被调用两次、三次等等,并且不断增加。

callSecondFunc是在执行callFirstFunc时调用的,因此它的侦听器也会被调用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',
            link: function (scope, element, attrs) {
                // some other code
                scope.$on("someEvent", function(){
                    detectSTuff();
                }) 
               function detectStuff(){
                  // other code
               }                    
            }
        };
    });

我想您忘了解除偶数处理程序的绑定。

你可以这样做-

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

此代码适用于我:

$rootScope.$$listeners.nameOfYourEvent.length = 1;

相关内容

  • 没有找到相关文章

最新更新