Angularjs指令删除观察?
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都提供了解决方案来确保观察者的正确处理。