当角度范围函数只运行一次时执行两次?

Ale*_*x G 1 angularjs

在这里演示

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

<div ng-hide="isSpecificPage()">
  <p>Hello!</p>
</div>
Run Code Online (Sandbox Code Playgroud)

Kay*_*ave 5

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