我有一个对象,让我们说用户。用户拥有自己的课程:
class User {
comments: Comments[];
get commentsSomething() {
const comments = this.comments.doSomething();
return comments;
}
}
我有一个组件,它在* ngFor中呈现并具有类似的内容:
<some-component *ngFor="let user of users" [value]="user.commentsSomething">
commentsSomething
是常量值,计算一次。但它以某种方式触发了跨应用程序的多个操作的某个组件的更改检测。
@Component(...some-component)
ngOnChanges() {
console.log('it goes crazy');
}
有太多,太多了,它变得疯狂&#39;在控制台中。
如果我像这样构造User类,问题就会消失:
class User {
comments: Comments[];
commentsSomethingHolder: any = null;
get commentsSomething() {
if (isNull(this.commentsSomethingHolder)) {
this.commentsSomethingHolder = this.comments.doSomething();
}
return this.commentsSomethingHolder;
}
}
我知道这是以某种方式连接到引用。但我无法理解为什么会发生这种情况,如果&#34; commentsSomething&#34;在* ngFor中,每个项目只运行一次方法。此外,some-component
以上的组件不会触发ngOnChanges。
那么,我应该如何传递这些数据,因此角度不会重复我的计算?