Angularjs 如何取消订阅应用程序模块运行块中的广播事件

Angularjs 如何取消订阅应用程序模块运行块中的广播事件,angularjs,Angularjs,我在阅读angularjs中有关清理附加到$scope的事件侦听器的正确方法时遇到了这篇文章 我正在我的应用程序模块运行块中侦听$rootScope上的事件: app.run(['$rootScope', function($rootScope){ $rootScope.$on('$stateChangeStart', function(event, toState, toParams){ //do stuff here... }); }]); 由于$scope在run块中不可

我在阅读angularjs中有关清理附加到$scope的事件侦听器的正确方法时遇到了这篇文章

我正在我的应用程序模块运行块中侦听$rootScope上的事件:

app.run(['$rootScope', function($rootScope){
  $rootScope.$on('$stateChangeStart', function(event, toState, toParams){
    //do stuff here...
  });
}]);
由于$scope在run块中不可用,我可以改为侦听$rootScope上的destroy事件吗

因此:


我不太确定我是否可以通过在线查看各种帖子和文档来实现这一点,因为$rootScope似乎没有破坏事件。那么正确的方法是什么呢?

“因为$scope在运行块中不可用”-是的,但它被称为
$rootScope
^^“看起来$rootScope没有破坏事件”。当您关闭或离开页面时,根范围会被破坏。一切都会过去,所以没有什么需要清理的。是的,好的,我想知道我是否需要担心它。问题是,我实际上是在启用这个插件的情况下使用ESLint-。它发出了一个基于此规则的警告--看起来我当时无法绕开它。既然没有什么需要清理的,您也可以使用
//eslint disable line angular/on watch
app.run(['$rootScope', function($rootScope){
  var listenerFn = $rootScope.$on('$stateChangeStart', function(event, toState, toParams){
    //do stuff here...
  });

  $rootScope.$on('$destroy', listenerFn);
}]);