Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 控制器函数被多次调用_Javascript_Angularjs - Fatal编程技术网

Javascript 控制器函数被多次调用

Javascript 控制器函数被多次调用,javascript,angularjs,Javascript,Angularjs,我在谷歌和StackOverflow做了一些研究,发现了几个类似的问题,但似乎没有一个能解决或解决我的具体问题。所以我的问题是: 在我正在处理的一些代码中,我从html调用了一个控制器函数,如下所示: <div ng-controller="MyCtrl"> <p>{{ myFunction() }}</p> </div> {{myFunction()}} 由于在myFunction中我做了一些跟踪,我注意到该函数被调用了4次 我在JS

我在谷歌和StackOverflow做了一些研究,发现了几个类似的问题,但似乎没有一个能解决或解决我的具体问题。所以我的问题是:

在我正在处理的一些代码中,我从html调用了一个控制器函数,如下所示:

<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
。直接绑定函数调用从来没有比这更好的方法,但有时这更容易考虑。