首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ngFor中创建组件时,Angular ngOnInit从未执行过

在ngFor中创建组件时,Angular ngOnInit从未执行过
EN

Stack Overflow用户
提问于 2019-03-15 04:19:57
回答 1查看 334关注 0票数 0

我遇到了一个谜团。我在一个ngFor循环中,如下例所示:

代码语言:javascript
复制
<div *ngFor="let rc of sortedKeys(ruleImplementations)">
    <vi-rule-contract [descriptor]="ruleDescriptors[rc]" [item]="action" [rc]="rc">
    </vi-rule-contract>
</div>

对于这N个已创建的'vi-rule-contract‘组件中的一个组件(一个非常具体的组件),ngOnInit将不会只被调用它的ngOnChanges和(descriptor,rc,item)的新值。对于所有其他的'vi-rule-contract‘,将调用ngOnInit,但不会调用ngOnChanges。所以我的问题是:

有没有这样一种情况,一个组件上的ngOnInit永远不会只调用它的ngOnChanges?

PS Angular 6.1.10

EN

回答 1

Stack Overflow用户

发布于 2019-03-15 04:26:23

问题是,你有一个定义列表的函数,这意味着ngFor不断地重复执行,这是非常糟糕的做法,angular试图通过只实例化一次组件,但改变输入来拯救你。

这里的修复方法是停止使用模板中的函数,并在需要时运行它。

代码语言:javascript
复制
<div *ngFor="let rc of sortedRuleImplementations">
    <vi-rule-contract [descriptor]="ruleDescriptors[rc]" [item]="action" [rc]="rc">
    </vi-rule-contract>
</div>

this.sortedRuleImplementations = this.sortedKeys(ruleImplementations);

我不能从您的代码中判断ruleImplementations何时更改,但您可能会在可观察的订阅中或其他什么地方执行此操作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55171323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档