我有两个控制器,一个有一个$destroy函数,当模型关闭时。
> $scope.$on("$destroy", function() {
>
> var args = {};
> $rootScope.$emit('refreshh', args);
> });在另一个控制器里,我有
$rootScope.$on('refreshh', function(event, args) {
console.log("modal closed");
});当我继续打开和关闭模型时,我会得到“模态关闭”,但是如果我从导航栏转到另一个页面(没有刷新页面),然后返回到该页面,我将得到“模态关闭”“模式关闭”,如果我重复这个过程,我将得到“模态关闭”“模式关闭”“模式关闭”,就像代码运行了X次一样。这可能是什么?
发布于 2018-09-10 15:42:33
当您将$on侦听器绑定到$rootScope而不显式销毁该侦听器(见文档)时,则每次实例化第二个控制器时,它都会向$rootScope添加另一个相同的侦听器。在第二个控制器中,要么需要绑定到本地$scope,要么在第二个控制器被销毁时确保销毁侦听器。
第二控制人:
var deregisterListener = $rootScope.$on('refreshh', function(event, args) {
console.log("modal closed");
});
$scope.$on("destroy", function() {
deregisterListener();
});没有这一点,您的$rootScope就会在每次实例化第二个控制器时安装一个侦听器,从而导致所有相同的侦听器一次触发。
https://stackoverflow.com/questions/52259749
复制相似问题