【发布时间】:2020-11-19 03:34:57
【问题描述】:
export class AppComponent implements OnInit, OnChanges {
@Input()
value: number;
constructor(
private cdr: ChangeDetectorRef
) {}
ngOnInit() {
of(1).subscribe(v => {
this.value = v;
console.log(1);
this.cdr.detectChanges();
of(2).subscribe(() => {
console.log(2);
});
})
}
ngOnChanges(c: SimpleChanges) {
console.log(3);
}
}
我预计 console.log 的序列应该是 1, 3, 2,但它只打印 1, 2。
我知道ngOnChanges 只会在只有input 更改来自模板绑定时才会触发。
所以我在console.log(1) 之后立即打电话给this.cdr.detectChanges(),但没有成功。
这里有什么问题?
我在这里制作了 stackblitz 示例 - https://stackblitz.com/edit/angular-ivy-ugdba1
额外问题
如果在组件内部无法触发ngOnChanges,this.cdr.detectChanges()会触发哪些生命周期钩子?
【问题讨论】:
-
如果你真的想触发
ngOnChanges(),你可以打电话给this.ngOnChanges()。这并不优雅,但我想说尝试通过任何其他方式手动触发钩子也不是。 -
好的,所以不可能自动触发..
-
我不知道这种方法。
-
你能检查我的额外问题吗?
标签: angular ngonchanges change-detector-ref