的text
属性与的属性TestComponent
绑定:testText
AppComponent
<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();
}
问题是当你修改testText
in时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以获取演示。