我正在开发一个带有角度的单页应用程序,我需要在两个基本没有父子关系的不同指令之间进行通信。
在指令A中,我有两个地方需要从不同的功能广播相同的事件。在指令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',
link: function (scope, element, attrs) {
// some other code
scope.$on("someEvent", function(){
detectSTuff();
})
function detectStuff(){
// other code
}
}
};
});
答案 0 :(得分:1)
我想你忘了取消绑定偶数处理程序。
你可以这样做 -
var someEventHandle = scope.$on("someEvent", function(){
detectSTuff();
});
scope.$on('$destroy', someEventHandle);

答案 1 :(得分:0)
此代码对我有用:
$rootScope.$$listeners.nameOfYourEvent.length = 1;