【发布时间】:2017-12-23 10:58:54
【问题描述】:
假设我有一个简单的文本数组:
textContent = [
{text: 'good morning'},
{text: 'lovely day'},
{text: 'for debugging'},
]
我为每个渲染一个简单的组件,将文本项作为输入传递:
<app-text *ngFor="let text of textContent" [text]="text"></app-text>
文本组件渲染文本,使用 ngModel:
<textarea [(ngModel)]="text.text"></textarea>
我也在登录 DoCheck:
ngDoCheck() {
console.log(this.text.text, ' has been checked')
}
当我在 one 文本区域中输入内容时,所有其他 组件的 DoCheck 都会被触发。
good morning has been checked
lovely days has been checked
for debuggings has been checked
即使使用 OnPush 进行更改检测也会发生这种情况。
问题:为什么对一个组件的数据所做的更改会触发检查整个树?
(对于少数组件来说这不是问题,但是对于更大的树,我会丢帧)。
我实际上注意到,即使是完全独立的内容树上的组件也会触发它们的“doCheck”。
有没有办法防止这种情况发生,还是我完全错过了其他东西?
【问题讨论】:
标签: angular angular2-changedetection