在范围破坏期间取消注册angularjs观察者是否有效 进程(使用scope.watch注册),以防止内存泄漏? 我听到有人建议注销所有手动监视器(“$ destroy”)事件。
例如,当我们导航到角度路由中的不同页面时,所有观察者都应该通过角度自动释放,我们不必担心释放它们。 (我们自己不必处理这个问题吗?)
是否曾经发生过,在给定范围进行角度破坏之后,注册的观察者没有被释放,从而出现内存泄漏?
我看到一个问题是手动处理观察员注销会使代码混乱。
答案 0 :(得分:1)
拥有太多$ watch可能会为网页带来性能问题,尤其是在移动设备上。这篇文章将解释如何删除无关的$ watch并加速你的应用程序!
任何$ watch都可以在不再需要时禁用。因此,我们可以自由选择何时从$ watch列表中删除$ watch。
让我们看一个例子:
档案:app.js
app = angular.module('app', []);
app.controller('MainCtrl', function($scope) {
$scope.updated = 0;
$scope.stop = function() {
textWatch();
};
var textWatch = $scope.$watch('text', function(newVal, oldVal) {
if (newVal === oldVal) { return; }
$scope.updated++;
});
});
文件:index.html
<body ng-controller="MainCtrl">
<input type="text" ng-model="text" /> {{updated}} times updated.
<button ng-click="stop()">Stop count</button>
</body>
$ watch函数本身返回一个函数,该函数在调用时解除$ watch的绑定。因此,当不再需要$ watch时,我们只需调用$ watch返回的函数。