javascript - Controller 函数被多次调用

标签 javascript angularjs

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

在我正在处理的一些代码中,我从我的 html 调用 Controller 函数,如下所示:

<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 的初学者,根据我的阅读,我认为这是正常的、预期的行为。是这样吗?如果是,为什么?如果不是,我的代码有什么问题?

最佳答案

这是正常行为,每次 $digest 循环运行时,都必须执行该函数以检查输出值是否发生变化,从而是否有新值可用于更新 DOM。

因此,最好在需要时从 Controller 更新 $scope 上的值,并在您的标记中引用它。通常不是一个有意义的差异,但如果您的函数正在为 ng-repeat 构建一个大数组,它可能会成为一个大问题。

编辑:参见 function called multiple times from template以获得更可靠的答案。

关于javascript - Controller 函数被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29714461/

相关文章:

javascript - AngularJS orderBy 使用字典顺序,即使是数字

javascript - 如何从 slickgrid 中的代码提交单元格中的更改

javascript - 应该在渲染 View 后运行的代码放在哪里?

javascript - html5隐藏所有div并在按钮点击时显示一个

javascript - Highcharts 工具提示断线

Internet Explorer 11 中的 JavaScript 错误

javascript - AngularJS:通过选项卡中的 Google Maps API v3 进行映射

javascript - 单击内部时防止 materializecss 下拉列表关闭

javascript - 如何更改 Firefox 25 的网络信息弹出窗口?

angularjs - 我的 Breeze 脚本中不推荐使用的方法的版本问题