我已经在Google和StackOverflow上做了一些研究,并发现了几个类似的问题,但似乎没有解决也没有解决我的具体案例。所以这是我的问题:
在我正在处理的一些代码中,我正在调用html中的控制器函数,如下所示:
<div ng-controller="MyCtrl">
<p>{{ myFunction() }}</p>
</div>
因为在myFunction中我做了一些跟踪,我注意到函数被调用了4次!
我在JS Bin创建了一个简约测试,在这里:http://jsbin.com/nukuhemata/1/edit?html,js,console,output
在这个减少的测试中,我的函数被调用3次(有一些进展;-)。如果不是{{ test() }}
而是我在其他一些答案中建议使用{{ ::test() }}
,那么它只会被调用两次(更多进展)。
我是Angular的初学者,从我所看到的,我认为这是正常的,预期的行为。是这样吗?如果是,为什么?如果没有,我的代码有什么问题?
答案 0 :(得分:4)
这是正常行为,每次$digest
周期运行时,必须执行该函数以检查输出值是否有变化,从而是否有新值来更新DOM。
因此,最好在需要时从控制器更新$scope
上的值,并在标记中引用该值。通常不是一个有意义的差异,但如果你的函数为ng-repeat
建立一个大数组,它可能会变得很大。
修改:请参阅function called multiple times from template以获得更强大的答案。