ngOnInit中的ExpressionChangedAfterItHasBeenCheckedError

时间:2018-01-26 08:08:02

标签: angular

每次发出HTTP请求时,我的HTTP拦截器都会打开加载栏:

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const dataStorageService = this.injector.get(DataStorageService);
    dataStorageService.openProgressbar.next(true);
    return next
        .handle(req)
        .do(evt => {
             if (evt instanceof HttpResponse) {
                 dataStorageService.openProgressbar.next(false);
            }
        })
        .catch(err => {
            return Observable.throw(err);
        });
    }

然后在我的data-storage-service我有一个主题:

openProgressbar = new Subject<boolean>();

我在我的应用程序组件中听到它,我放置了加载栏:

ngOnInit() {
    this.dataStorageService.openProgressbar.subscribe(czyOtworzyc => {
        this.alertMessageNavbarStatus = true;
    });
}

ExpressionChangedAfterItHasBeenCheckedError正在显示。 我正在寻找使用ngAfterContentChecked的解决方案,但它对我不起作用。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

将<{3}}注入组件

import { ChangeDetectorRef } from '@angular/core';

constructor(private _changeDetectorRef: ChangeDetectorRef) {}

手动运行更改检测

ngOnInit() {
    ...
    this._changeDetectorRef.detectChanges();
}