角$ destroy正在堆叠

时间:2018-09-10 14:13:02

标签: angularjs

我有2个控制器,其中一个具有关闭模型时的$ destroy功能。

>  $scope.$on("$destroy", function() {
>        
>         var args = {};
>         $rootScope.$emit('refreshh', args);   
>     });

在另一个控制器中,我有

$rootScope.$on('refreshh', function(event, args) {
        console.log("modal closed");

    });

当我继续打开和关闭模型时,它工作正常,我得到“模态关闭”,但是如果我从导航栏转到另一个页面(不刷新页面),然后返回该页面,获得“模态关闭”“模态关闭”,如果我重复此过程,我将获得“模态关闭”“模态关闭”“模态关闭”,就像代码正在运行X倍。这可能是什么?

1 个答案:

答案 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每次实例化第二个控制器时都会产生一个监听器,导致所有这些相同的监听器立即触发。