如何在Angular中取消绑定$ on?

jcu*_*bic 10 javascript javascript-events angularjs

我有一个代码在init上使用$ scope.$,然后在函数中,所以代码执行多次.如果在再次绑定它之前我怎么能解除绑定.我试过$ scope.$ off但是没有这样的功能,docs.angularjs.org/api对$ on一无所知.我正在使用角度1.0.6.

sun*_*tha 30

如果你没有取消注册事件,你将收到内存泄漏,因为传递给$ on的函数将不会被清除(因为它的引用仍然存在).更重要的是,任何在其范围内起作用引用的变量也将被泄露.如果在应用程序中多次创建/销毁控制器,这将导致您的函数被多次调用.幸运的是,AngularJS提供了一些有用的方法来避免内存泄漏和不必要的行为:

  • $ on方法返回一个函数,可以调用该函数来取消注册事件监听器.
  • 每当在Angular中清理一个作用域(即控制器被破坏)时,就会在该作用域上触发$ destroy事件.您可以注册$ scope的$ destroy事件并从中调用cleanUpFunc.

请参阅文档

示例代码:

   angular.module("TestApp")
      .controller("TestCtrl",function($scope,$rootScope){
        var cleanUpFunc = $scope.$on('testListener', function() {
          //write your listener here
        });

       //code for cleanup
       $scope.$on('$destroy', function() {
         cleanUpFunc();
        };      
    })
Run Code Online (Sandbox Code Playgroud)


phy*_*lax 5

$scope.$on 返回一个可以调用取消注册的函数.