Angularjs 有角度的破坏正在堆积

Angularjs 有角度的破坏正在堆积,angularjs,Angularjs,我有两个控制器,其中一个有$destroy函数,用于模型关闭时 > $scope.$on("$destroy", function() { > > var args = {}; > $rootScope.$emit('refreshh', args); > }); 在另一个控制器中,我有 $rootScope.$on('refreshh', function(event, args) {

我有两个控制器,其中一个有$destroy函数,用于模型关闭时

>  $scope.$on("$destroy", function() {
>        
>         var args = {};
>         $rootScope.$emit('refreshh', args);   
>     });
在另一个控制器中,我有

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

    });

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

当您将
$on
侦听器绑定到
$rootScope
并且没有显式销毁该侦听器(),那么每次实例化第二个控制器时,它都会向
$rootScope
添加另一个相同的侦听器。在第二个控制器中,您需要绑定到本地
$scope
,或者确保在第二个控制器被销毁时销毁侦听器

第二控制器:

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


$scope.$on("destroy", function() {
  deregisterListener();
});

如果没有这一点,最终发生的情况是,每次实例化第二个控制器时,您的
$rootScope
都会安装一个侦听器,导致所有相同的侦听器同时启动。

我认为您的问题在于您正在声明
$rootScope.$on的控制器('refreshh'…
当您在
$rootScope
中注册事件时,即使您的控制器被破坏,它仍将保持与
$rootScope
的绑定。请尝试执行
$scope.$on('refreshh'…
)操作。希望它能解决您的问题。