我有一个Plunkr在这里演示问题:https://plnkr.co/edit/e5OVhuWtyStxI1vvXd9h
摘要是:
我有一个父子组件。孩子的变化检测策略设置为onPush。
Child的模板就是这样:
@Component({
selector: 'child',
template: `
<button (click)="changeHello()">Change</button>
{{hello}}
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
export class ChildComponent {
hello = "hi";
ngOnChanges() {
console.log("on changes called");
}
ngDoCheck() {
console.log("do check called");
}
changeHello() {
this.hello = "goodbye";
}
}
为什么当我点击按钮时一切正常并且更改实际反映在视图中? (即从hi
更改为goodbye
)
我认为事件的顺序是:
onTurnDone()
区域事件被调用,Angular开始从根{{hello}}
未更新为goodbye
,仍显示旧的hi
我的上述推理在哪里出错了?
为什么ngDoCheck()
被调用?