控制器功能被多次调用

时间:2015-04-18 07:42:14

标签: javascript angularjs

我已经在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的初学者,从我所看到的,我认为这是正常的,预期的行为。是这样吗?如果是,为什么?如果没有,我的代码有什么问题?

1 个答案:

答案 0 :(得分:4)

这是正常行为,每次$digest周期运行时,必须执行该函数以检查输出值是否有变化,从而是否有新值来更新DOM。

因此,最好在需要时从控制器更新$scope上的值,并在标记中引用该值。通常不是一个有意义的差异,但如果你的函数为ng-repeat建立一个大数组,它可能会变得很大。

修改:请参阅function called multiple times from template以获得更强大的答案。