Angularjs指令删除观察?

15 浏览
0 Comments

Angularjs指令删除观察?

在指令的控制器中,我使用了`$scope.$watch`。当我切换页面并移除指令时,我需要手动销毁这个监听器吗?如果是的话,如何检测指令何时被移除?

0
0 Comments

AngularJS指令删除观察者的原因是因为作用域的销毁。当作用域被销毁时,其中的所有$watcher也会随之销毁。在页面切换时,AngularJS会自动销毁作用域,因此你不需要担心这个问题。

当作用域被销毁时,会触发$destroy事件。你可以通过监听该事件来处理相应的操作:

$scope.$on('$destroy', callback);

你也可以手动从作用域中移除$watcher,只需要调用watcher函数即可:

var sentinel = $scope.$watch('expression', callback);
sentinel(); // 销毁watcher

你也可以使用$on来进行类似的操作。

首先,你提到当作用域被销毁时,所有的观察者都会随之销毁。然后你建议在作用域的$destroy事件中手动移除观察者(为什么?它们应该会随着作用域的销毁而自动移除)。我对此表示不理解。你能否详细说明一下?

当使用ngView切换页面时,AngularJS会自动清理上一个作用域中的观察者(证据参考:goo.gl/GD0pM9)。此外,AngularJS还提供了一个观察者销毁函数,可以在当前作用域上手动移除表达式的观察者,如果你不再需要它。

所以,无论是页面切换还是手动移除观察者,AngularJS都提供了解决方案来确保观察者的正确处理。

0