Angularjs - 取消注册观察者

时间:2017-05-18 12:07:34

标签: angularjs memory-leaks

在范围破坏期间取消注册angularjs观察者是否有效  进程(使用scope.watch注册),以防止内存泄漏? 我听到有人建议注销所有手动监视器(“$ destroy”)事件。

例如,当我们导航到角度路由中的不同页面时,所有观察者都应该通过角度自动释放,我们不必担心释放它们。 (我们自己不必处理这个问题吗?)

是否曾经发生过,在给定范围进行角度破坏之后,注册的观察者没有被释放,从而出现内存泄漏?

我看到一个问题是手动处理观察员注销会使代码混乱。

1 个答案:

答案 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返回的函数。