模板内的函数被多次调用(Angular JS)

维克多·拉尔特

今天,我不得不解决由以下代码引起的性能问题:注意模板内调用的updateStats

<script type="text/ng-template" id="entityGrouper">

<section>

<div>
<ul ng-click="hideEntityBox = !hideEntityBox">
<li>
{{ entityNode.name }}
</li>
<li ng-repeat="breadcrumbItem in entityNode.breadcrumb">
{{ breadcrumbItem }}
</li>
</ul>
{{ updateStats(entityNode) }}
<span ng-include="'/mypath/views/resume.html'"></span>
</div>

<div>

<div ng-repeat="entityNode in entityNode.group" ng-include="'entityGrouper'"></div>
<div ng-repeat="entity in entityNode.group" ng-include="'entityBox'"></div>

</section>

</script>

模板使用:

<div ng-repeat="entityNode in entityNode.group" ng-include="'entityGrouper'"></div>

调试此代码后,我发现此函数的调用时间比数组大小要多得多(我的数组有4个对象,并且该函数被调用了100倍以上),甚至鼠标悬停也称为该函数。我只是通过在模板中放置ng-init来解决此问题,现在它可以正常工作,但是我不知道为什么这个函数被调用了很多次。关于双向数据绑定有什么东西吗?

永恒之光

发生这种情况的原因不是因为双向数据绑定(适用于表单输入),而是因为角度变化检测。Angular会定期检查绑定到模板的任何值是否已更改,如果已更改,则在视图中更新其值。通常,它由用户生成的事件触发。为了检查是否updateStats(entityNode)更改了值,Angular对其进行了评估,这会导致性能下降

要解决此问题,updateStats(entityNode) 如果结果设置一次并且将来永远不会更改,则可以使用前面提到的一次性绑定我想这是您的情况,您已经将评估移至ng-init对于随时间更新的值,最好在entityNodelike中创建一个单独的属性entityNode.stats,将其显示在模板中,并updateStats(entityNode)仅在必要时在控制器或服务中运行这样一来,您将避免updateStats(entityNode)在每个摘要周期上运行(您已经知道这样做的频率),从而提高了应用程序的性能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不属于范围的模板中的Angular JS调用函数

来自分类Dev

从模板多次调用的函数

来自分类Dev

流星JS模板渲染函数在渲染模板之前调用?

来自分类Dev

Typed.js-如何多次调用onClick函数

来自分类Dev

从模板多次调用该函数

来自分类Dev

Angular js工厂调用“不是函数”

来自分类Dev

Angular.js无限循环调用函数

来自分类Dev

Angular JS工厂调用“不是函数”

来自分类Dev

Angular.js无限循环调用函数

来自分类Dev

渲染Angular指令后调用js函数

来自分类Dev

在 angular js 中正确调用函数的困难

来自分类Dev

加载模板时调用动作函数(Ember.js)

来自分类Dev

VueJS-直接从模板调用外部JS文件中的函数

来自分类Dev

Angular.js-首次调用后函数开始递归调用

来自分类Dev

Angular:如何遍历模板内的不可变js Map?

来自分类Dev

防止js函数多次运行

来自分类Dev

防止js函数多次运行

来自分类Dev

从此对象内的嵌套对象调用JS函数

来自分类Dev

JS call():正在调用的函数内意外的“ this”上下文

来自分类Dev

JS`this`关于函数调用

来自分类Dev

JS递归函数调用

来自分类Dev

从js调用swift函数

来自分类Dev

调用函数JS的元素

来自分类Dev

在Node.js中多次调用计算量大的函数的最快方法

来自分类Dev

控制器中的Angular.js调用指令函数

来自分类Dev

Angular.js在指令中调用jquery函数

来自分类Dev

Angular.JS onclick函数仅在首次单击时调用

来自分类Dev

从Angular应用程序调用Node.js中的函数

来自分类Dev

使用其参数在angular js中调用函数