2017-10-31 8 views
0

私は、アプリケーションの各http.getアクションにローディングスピナーを追加しようとしています。ここでLoadingChangedAfterItHasBeenCheckedErrorサービスの読み込み

は私http.getです:

protected get(url: string): any { 

    //Loading start 
    this.sessionService.showLoader(); 
    (...) 
} 

SessionServiceは私LoadingServiceを呼び出します。ここ

constructor(private cookieService: CookieService, private loadingService : LoadingService) { 

} 

public showLoader(): void { 
    this.loadingService.show(); 
} 

public hideLoader(): void { 
    this.loadingService.hide(); 
} 

は私のサービスはLoadingService

import { Injectable, OnInit, EventEmitter } from '@angular/core'; 

@Injectable() 
export class LoadingService implements OnInit { 


    public loadingEvent: EventEmitter<boolean>; 


    constructor() { 
    this.loadingEvent = new EventEmitter(); 
    } 

    ngOnInit() { 
    this.loadingEvent.emit(false); 
    } 


    show() { 
    this.loadingEvent.emit(true); 

    } 

    hide() { 
    this.loadingEvent.emit(false); 
    } 

} 

あるし、ここの一部であります私の主なレイアウトコンポーネント:

showLoadingDiv : boolean; 

    constructor(public loadingService : LoadingService) { 
    } 

    ngOnInit() { 

    } 


    ngAfterViewInit(){ 
    this.loadingService.loadingEvent.subscribe((res) => { 
     this.showLoadingDiv = res; 
    }); 
    } 

そして最後に、私のHTMLレイアウトテンプレートで:

<div class="loaddiv" *ngIf="showLoadingDiv"> 
Loading... 
</div> 

、他のモジュールがロード速い場合、私はエラーExpressionChangedAfterItHasBeenCheckedErrorを持っていないが、モジュールは(膨大なデータので)少し時間がかかる場合は、私はこのエラーがあります。私はすでに、これはSOではなく、私のために働く見てる

:ngAfterViewInitライフサイクルフックで値を変更する場合 https://stackoverflow.com/a/38846793/1729211

答えて

0

エラーが発生します。 setTimeout()の.subscribeにコードをラップするのが速い方法です。これについて深く説明した良い記事がありましたが、私はそれを私の電話で見つけることができません、おそらく誰かがそれを投稿することができます。

+0

タイムアウト解決策が他のサーバーの応答に依存するので、私はそれを好まないのです。私が見つけた唯一の解決策は '[class.hidden] ="!showLoadingDiv "'を使うことです。 '[ngClass] =" showLoadingDiv? 'show': 'hidden' "'を使用すると、エラーが発生します。 '* ngIf =" showLoadingDiv "と同じです。 – Portekoi

+0

もう1つの解決策は、ChangeDetectionを自分のコンストラクタに注入し、あなたのサブスクライブ内で' detectChanges'を呼び出すことによって、サブスクライブで自分自身でChangeDetectionを呼び出すことです – Chris

関連する問題