我工作的一个单页的应用程序,具有角和我有需要,基本上没有父子关系的2个不同的指令之间进行通信。
在指令中,我有2个地方,我需要从不同的功能广播同一事件。而在指令B,都写在监听一个$。
现在,我观察到,每当callFirstFunc和它的广播被称为首次,听者就会被调用一次。在随后的通话,监听器被调用两次,三次等,它不断增加。
当callFirstFunc已执行的callSecondFunc被调用,所以这个听者也被称为多无。时代的听众在广播callFirstFunc。那么,为什么听者不叫只有一次,为什么多次?它是循环和增加每次。
指令答:
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;