Javascript 控制器函数被多次调用
我在谷歌和StackOverflow做了一些研究,发现了几个类似的问题,但似乎没有一个能解决或解决我的具体问题。所以我的问题是: 在我正在处理的一些代码中,我从html调用了一个控制器函数,如下所示:Javascript 控制器函数被多次调用,javascript,angularjs,Javascript,Angularjs,我在谷歌和StackOverflow做了一些研究,发现了几个类似的问题,但似乎没有一个能解决或解决我的具体问题。所以我的问题是: 在我正在处理的一些代码中,我从html调用了一个控制器函数,如下所示: <div ng-controller="MyCtrl"> <p>{{ myFunction() }}</p> </div> {{myFunction()}} 由于在myFunction中我做了一些跟踪,我注意到该函数被调用了4次 我在JS
<div ng-controller="MyCtrl">
<p>{{ myFunction() }}</p>
</div>
{{myFunction()}}
由于在myFunction中我做了一些跟踪,我注意到该函数被调用了4次
我在JS Bin创建了一个简约测试,如下所示:
在这个简化测试中,我的函数被调用了3次(有一些进展;-)。如果像我看到的一些其他答案中所建议的那样,我使用{{test()}}{/code>而不是{{{test()}}
,那么它只会被调用两次(还有一些进展)
我是一个角度的初学者,从我所读到的我认为这是正常的,预期的行为。是这样吗?如果是,为什么?如果没有,我的代码有什么问题?这是正常行为,每次运行$digest
循环时,都必须执行该函数以检查输出值是否已更改,从而检查是否有新值要更新DOM
因此,更好的做法是在需要时从控制器更新$scope
上的值,并在标记中引用该值。通常没有什么意义的区别,但如果您的函数正在为一个ng repeat
构建一个大数组,它可能会成为一件大事
编辑:请参阅,以获得更可靠的答案。您能否再展示一些代码,尤其是您拥有的路由器和监视程序?当然,我自己也遇到过很多次。这是angular的最大缺点,它使用了大量脏检查,意识到这一点对于保持应用程序的性能很重要。对于同一个问题,这个问题的答案更深入了一点:非常感谢,知道这很正常让我松了一口气,一开始我是疯了。我必须阅读有关摘要周期的内容,才能理解angular为什么需要进行多达4次。是的,理解$apply
和$digest
对于任何规模的应用程序都至关重要。这个特殊问题的寓意是绑定{{test}}
而不是{{test()}
,然后在控制器中仅在需要时更新test
。直接绑定函数调用从来没有比这更好的方法,但有时这更容易考虑。