1

演示在这里

快速提问:在下面的代码中我只调用了isSpecificPage()一次函数,为什么它 console.log 两次?

<div ng-hide="isSpecificPage()">
  <p>Hello!</p>
</div>
4

2 回答 2

6

Angular 会监视您的ng-hide函数,以便在每个摘要周期它都可以查看结果是否发生了变化(因此它是否需要从隐藏更改为显示您的元素,反之亦然)。

当监视的函数被评估时(在 期间$digest),如果它们中的任何一个与之前的函数相比发生了变化,$digest那么 Angular 就知道变化可能会波及其他被监视的函数(也许改变的变量被用于另一个被监视的函数)。因此,每个手表都被重新评估(也称为脏处理),直到没有一个手表导致更改。因此,通常您会看到每个摘要对监视函数的调用 2 次,有时甚至更多(在 10 次循环中最多 10- 放弃并报告错误说它无法稳定)。

这里有更多关于watchdigest

http://docs.angularjs.org/api/ng .$rootScope.Scope

http://www.benlesh.com/2013/08/angularjs-watch-digest-and-apply-oh-my.html

于 2013-11-15T04:09:35.370 回答
-1

ng-hide$watch内部使用的指令之一。由于$watch使用摘要循环(至少运行 2 次以检查值是否已更改),因此您的函数isSpecificPage已运行两次。

有关$watch内部使用的指令列表,请参阅此 stackoverflow answer directives that add watch internal

于 2016-09-16T18:40:54.473 回答