私は角度のある単一ページアプリに取り組んでおり、基本的に親子関係を持たない2つの異なるディレクティブ間で通信する必要があります。
ディレクティブ A には、異なる関数から同じイベントをブロードキャストする必要がある場所が 2 つあります。ディレクティブ B では、そのための $on リスナーを作成しました。
ここで、callFirstFunc とそのブロードキャストが初めて呼び出されるたびに、リスナーが 1 回呼び出されることを確認します。その後の呼び出しで、リスナーは 2 回、3 回と呼び出され、増加し続けます。
callFirstFunc が実行されたときに callSecondFunc が呼び出されるため、これに対するリスナーも何度も呼び出されます。callFirstFunc でのブロードキャストのリスナーの回数。では、リスナーが 1 回だけではなく、複数回呼び出されるのはなぜでしょうか。毎回ループして増えています。
ディレクティブ 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
}
}
};
});