如何判断范围是否已被销毁

How to tell if scope has been destroyed

我正在将内容放入队列中,然后一项一项地处理它们。这些东西可能属于 AngularJS 范围。如果它所属的范围在我到达它时已经被销毁,我想跳过处理它。 (用户已经离开将显示结果的 UI,因此没有必要计算它。)

一个选项是:

function enqueue(stuff, scope) {
  queue.push(stuff);
  scope.$on('$destroy', function() {
    queue.discard(stuff);
  });
}

但我觉得这有点重量级。它为每个 "stuff" 添加一个事件处理程序。 (当我使项目出队时,我还需要删除此事件处理程序。)我觉得在我使项目出队时检查范围是否已被销毁会更好。

function process(stuff, scope) {
  if (scope.$destroyed) { // Fictional API.
    return; // Skip processing, scope is already gone.
  } else {
    ... // Actually process "stuff".
  }
}

scope.$destroyed 是虚构的,但我正在寻找类似的东西。谢谢!

您可以使用 $scope.$$destroyed 标记来检查作用域是否被销毁。