加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – 函数被多次调用

发布时间:2020-12-17 06:49:21 所属栏目:安全 来源:网络整理
导读:我想显示一个dataList.某些值是从函数计算的.似乎angular2多次调用计算函数. tr *ngFor="let data of dataList" td{{ data.no }}/td td{{ data.name }}/td td{{ calculateFunction(data.price) }}/td /tr 控制台将多次输出“calculate …”,超过dataList.len
我想显示一个dataList.某些值是从函数计算的.似乎angular2多次调用计算函数.

<tr *ngFor="let data of dataList">
    <td>{{ data.no }}</td>
    <td>{{ data.name }}</td>
    <td>{{ calculateFunction(data.price) }}</td>
  </tr>

控制台将多次输出“calculate …”,超过dataList.length.

calculateFunction() {
  console.log('calculate...');
  return ...;
}

我应该担心性能还是让angular2这样做?

解决方法

每当Angular运行组件的更改检测时(更准确地说,对于由ngFor创建的嵌入视图),将调用caculateFunction(data.price)函数.这是因为更新DOM是变更检测的一部分,Angular需要调用caculateFunction来了解用于DOM更新的值.并且更改检测周期可以经常运行.因此,如果列表中有3个项目并且CD最初被触发3次,您将看到该函数被调用9次.

如果你检查updateRenderer函数,你应该看到这些内容:

function(_ck,_v) {
    var _co = _v.component;
    var currVal_0 = _co.calculateFunction(_v.context.$implicit);
    _ck(_v,3,currVal_0);
  }

阅读更多关于Angular如何在The mechanics of DOM updates in Angular中更新DOM的信息.

Should I worry about that for performance or just let angular2 do
this?

如果calculateFunction(data.price)以相同的价格返回相同的结果,则最好事先为每个项目计算这些值,并在模板中简单地渲染它们.

<td>{{ data.no }}</td>
<td>{{ data.name }}</td>
<td>{{ data.calculatePrice) }}</t

这样,您将避免性能下降函数调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读