的text属性与的属性TestComponent绑定:testTextAppComponent
<app-test-component #testComponent [text]="testText"></app-test-component>
text并且当在以下位置修改属性时触发更改检测TestComponent:
@Input() set text(value: string) {
this._text = value;
this.cd.markForCheck();
this.cd.detectChanges();
}
问题是当你修改testTextin时AppComponent,text属性设置器 inTestComponent只会在下一个变化检测周期被调用。testText您可以通过在修改后立即强制更改检测来消除延迟AppComponent:
this.testText = "Some new text";
this.cd.detectChanges();
console.log(`height right after changing is ${this.testComponent.height}`);
为确保修改后始终触发更改检测testText,您可以将其定义为 getter/setter 属性,并ChangeDetectorRef.detectChanges在 setter 中调用:
public _testText = '';
get testText(): string {
return this._testText;
}
set testText(value: string) {
this._testText = value;
this.cd.detectChanges();
}
有了该代码,您无需在TestComponent.
请参阅此 stackblitz以获取演示。