我有一个代码在init上使用$ scope。$,然后在函数中,所以代码执行多次。如果在再次绑定它之前我怎么能解除绑定。我尝试过$ scope。$ off但是没有这样的功能,docs.angularjs.org / api对$ on一无所知。我使用了角度1.0.6。
答案 0 :(得分:30)
如果您没有取消注册该事件,您将收到内存泄漏,因为您传递给$ on的功能将无法清除(因为它的引用仍然存在)。更重要的是,任何在其范围内起作用引用的变量也将被泄露。如果在应用程序中多次创建/销毁控制器,这将导致您的函数被多次调用。 幸运的是,AngularJS提供了一些有用的方法来避免内存泄漏和不必要的行为:
参见文档
示例代码:
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
返回一个可以调用取消注册的函数。