Свойство 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
в AppComponent
установщик свойства text
в TestComponent
будет вызываться только при следующем цикле обнаружения изменений.Вы можете устранить задержку, принудительно обнаружив изменения, как только testText
будет изменен в AppComponent
:
this.testText = "Some new text";
this.cd.detectChanges();
console.log(`height right after changing is ${this.testComponent.height}`);
Чтобы убедиться, что обнаружение изменений всегда срабатывает после изменения testText
, вы можете определить егокак свойство получателя / установщика и вызовите ChangeDetectorRef.detectChanges
в установщике:
public _testText = '';
get testText(): string {
return this._testText;
}
set testText(value: string) {
this._testText = value;
this.cd.detectChanges();
}
С этим кодом вам не нужно принудительно обнаруживать изменения в TestComponent
.
См. этот стек для демонстрации.