下面是一個example:ExpressionChangedAfterItHasBeenCheckedError雙向角結合
@Component({
selector: 'my-app',
template: `
<div>
<h1>{{ foo }}</h1>
<bpp [(foo)]="foo"></bpp>
</div>
`,
})
export class App {
foo;
}
@Component({
selector: 'bpp',
template: `
<div>
<h2>{{ foo }}</h2>
</div>
`,
})
export class Bpp {
@Input('foo') foo;
@Output('fooChange') fooChange = new EventEmitter();
ngAfterViewInit() {
const potentiallyButNotNecessarilyAsyncObservable = Observable.of(null);
potentiallyButNotNecessarilyAsyncObservable.subscribe(() => {
this.fooChange.emit('foo');
})
}
}
其中的錯誤,偶爾會出現:
ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'undefined'. Current value: 'foo'
它的事實,雙向綁定是通過觀察到更新的結果,可以在相同的勾號上獲得價值。我寧願不用上面的邏輯來包裝setTimeout
,因爲它看起來像一個黑客行爲並使控制流程變得複雜了。
在這裏可以做些什麼來避免這個錯誤?
ExpressionChangedAfterItHasBeenCheckedError
錯誤是否有不良影響或可以忽略?如果可以的話,可以改變探測器對其進行沉默而不污染控制檯?
我從來沒有得到那個錯誤,但你有沒有嘗試過使用異步管道?可能會有所幫助。 – fastAsTortoise
@fastAsTortoise此處不適用管道無論模板如何,都會顯示錯誤。 – estus