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

时间:2014-05-02 08:58:54

标签: javascript angularjs javascript-events

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

2 个答案:

答案 0 :(得分: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();
        };      
    })

答案 1 :(得分:5)

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