快速提问:在下面的代码中我只调用函数isSpecificPage()
一次,为什么调用console.log两次?
<div ng-hide="isSpecificPage()">
<p>Hello!</p>
</div>
答案 0 :(得分:5)
Angular会对您的ng-hide
函数进行监视,以便每个摘要周期都可以看到结果是否发生了变化(因此如果需要从隐藏更改为显示您的元素,反之亦然)。
当评估观察到的函数时(在$digest
期间),如果它们中的任何一个已经从之前的$digest
发生了变化,那么Angular知道这种变化可能会波及其他观察到的函数(也许改变的变量用于另一个看了功能)。因此,每个手表都会被重新评估(也称为脏处理),直到所有手表都没有变化。因此,通常情况下,每次摘要会看到2次调用观看函数的次数,有时甚至更多(通过它的10次循环最多10次放弃并报告错误,表示无法稳定)。
此处还有watch
和digest
:
http://docs.angularjs.org/api/ng。$ rootScope.Scope
http://www.benlesh.com/2013/08/angularjs-watch-digest-and-apply-oh-my.html
答案 1 :(得分:-1)
ng-hide
是内部使用$watch
的指令之一。由于$watch
使用摘要周期(至少运行2次以检查值是否已更改),因此您的函数isSpecificPage
已运行两次。
有关在内部使用$watch
的指令列表,请参阅此stackoverflow回答directives that add watch internally。