我有2个控制器,其中一个具有关闭模型时的$ destroy功能。
> $scope.$on("$destroy", function() {
>
> var args = {};
> $rootScope.$emit('refreshh', args);
> });
在另一个控制器中,我有
$rootScope.$on('refreshh', function(event, args) {
console.log("modal closed");
});
当我继续打开和关闭模型时,它工作正常,我得到“模态关闭”,但是如果我从导航栏转到另一个页面(不刷新页面),然后返回该页面,获得“模态关闭”“模态关闭”,如果我重复此过程,我将获得“模态关闭”“模态关闭”“模态关闭”,就像代码正在运行X倍。这可能是什么?
答案 0 :(得分:4)
当您将$on
侦听器绑定到$rootScope
而没有明确销毁该侦听器(see docs)时,则每次实例化第二个控制器时,它都会添加另一个相同的侦听器到$rootScope
。在第二个控制器中,您需要绑定到本地$scope
或确保在销毁第二个控制器时销毁侦听器。
第二个控制器:
var deregisterListener = $rootScope.$on('refreshh', function(event, args) {
console.log("modal closed");
});
$scope.$on("destroy", function() {
deregisterListener();
});
否则,最终会发生的情况是,您的$rootScope
每次实例化第二个控制器时都会产生一个监听器,导致所有这些相同的监听器立即触发。