7

$scope.$watch在指令的控制器中声明了一个。当我更改页面并删除指令时,我是否必须手动销毁路径?如果是这样,我如何检测指令何时被删除?

4

1 回答 1

21

它取决于范围,而不是指令。如果作用域被销毁,那么它的所有 $watchers 都会随之死亡。在页面更改时,您的范围会被角度破坏,因此您应该是安全的。

当作用域死亡时,它会产生一个 $destroy 事件。你可以观看它:

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

您可以通过调用它返回的函数手动将 $watchers 从范围中分离出来:

var sentinel = $scope.$watch('expression', callback);
sentinel(); // kill sentinel

你也可以用 $on 来做到这一点。

于 2013-06-06T08:57:51.093 回答