を結合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