【发布时间】:2014-09-26 15:26:56
【问题描述】:
目前正在开展一个项目,在该项目中,我们发现在未清除已破坏范围内的广播订阅时存在巨大的内存泄漏。以下代码已修复此问题:
var onFooEventBroadcast = $rootScope.$on('fooEvent', doSomething);
scope.$on('$destroy', function() {
//remove the broadcast subscription when scope is destroyed
onFooEventBroadcast();
});
这种做法也应该用于手表吗?下面的代码示例:
var onFooChanged = scope.$watch('foo', doSomething);
scope.$on('$destroy', function() {
//stop watching when scope is destroyed
onFooChanged();
});
【问题讨论】:
-
为什么不在当前的
$scope上使用$on?当作用域被销毁时,当前$scope的订阅将被删除。 -
顺便可以简单的通过 oFooEventBroadcast 注销函数如下 $scope.$on('$destroy', onFooEventBroadcast) 。你不需要自己调用它。
标签: javascript angularjs angularjs-directive angularjs-scope