我正在开发一个带有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;