Demo here当它只运行一次时,角度范围函数会执行两次吗?
快速的问题:在下面的代码我只调用该函数isSpecificPage()
一次,为什么CONSOLE.LOG两次?
<div ng-hide="isSpecificPage()">
<p>Hello!</p>
</div>
Demo here当它只运行一次时,角度范围函数会执行两次吗?
快速的问题:在下面的代码我只调用该函数isSpecificPage()
一次,为什么CONSOLE.LOG两次?
<div ng-hide="isSpecificPage()">
<p>Hello!</p>
</div>
角穿上你的ng-hide
功能的手表让每一个消化周期也可以看到,如果结果改变了(因而,如果它需要从隐藏出示您的元素,反之亦然改变)。
当观看功能进行评估(在$digest
)如有人已经从以前$digest
改变,那么角知道这种改变会通过纹波等观看功能(可能是改变的变量在另一个观看功能使用)。所以每个手表都会重新评估(也称为脏处理),直到没有手表发生变化。因此,通常情况下,您会在每个摘要中看到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
ng-hide
是使用$watch
内部的指令之一。由于$watch
使用摘要循环(至少运行2次以检查值是否已更改),因此您的函数isSpecificPage
已运行两次。
有关在内部使用$watch
的指令列表,请参阅此计算器的答案directives that add watch internally。
谢谢,我不知道是否有办法减少时间,那是我能够只运行一次该功能吗? –
不在'ng-hide'内。 Angular需要这种机制,因此无论何时您的条件更改的结果都可以更改元素的可见性。减少通话的动机是什么? – KayakDave