gpt4 book ai didi

angularjs - 防止 $rootScope.$on 多次调用函数

转载 作者:行者123 更新时间:2023-12-04 23:19:50 26 4
gpt4 key购买 nike

我在 Controller 顶部有一个 $rootScope.$on 代码。我注意到每次我加载/调用这个 Controller 时, $rootScope.$on 监听器都会增加,这意味着它会在你访问 Controller 时无限期地添加、添加和添加一个监听器。

当我从另一个 Controller 通过 $rootScope.$emit 调用它时,我注意到它, $rootScope.$on 中的函数被执行了多次,即使它只是一个发射/广播。

$rootScope.$on('listen', function() {
$scope.displayString();
});

$scope.displayString = function() {
console.log('test'); // This display 7 times because I visit the controller 7 times
}

是否有可能阻止它创建另一个监听器实例,以便当已经有一个监听器时,它不会创建一个新的监听器。

最佳答案

当您的 Controller 的作用域被销毁时,您需要取消注册事件监听器。
$on函数返回一个注销函数,该函数将在调用该函数时删除监听器。

所以你可以这样设置:

var deregister = $rootScope.$on('listen', function() {
$scope.displayString();
});
$scope.$on('$destroy', deregister);

注意:这仅在 Controller 的范围被实际销毁时才有效(例如,在从 DOM 中删除的指令中或导航到不同的路由时)。如果这没有发生,那么您将需要找出一种方法,只注册一次事件监听器。

关于angularjs - 防止 $rootScope.$on 多次调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30521559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com