2017-06-24 12 views
1

私は示しローダを有し、要求が開始され、要求が終了したときに非表示HTTPサービスや、この要求方法でリクエストでAngular 2でカスタムRequestOptionsArgsを提供するにはどうすればよいですか?

request(url: string|Request, options?: RequestOptionsArgs): Observable<Response> 

として上書きされた方法を拡張しました。

request(url: string|Request, options?: RequestOptionsArgs): Observable<Response> { 
    this.loadingService.start(); 

    if (!options) { 
     options = {}; 
     options.headers = new Headers(); 
    } 
    this.updateHeaders(options.headers); 
    if (typeof url !== 'string') { 
     this.updateHeaders(url.headers); 
    } 

    return super.request(url, options) 
     .catch((response: Response) => this.authError(response)) 
     .finally(() => { 
      this.loadingService.done(); 
     }); 
} 

ローディングサービスはローディングインジケータの開始と停止を行います。しかし、私はこのローディングインジケータをすべてのリクエストに表示したくありません。ローダーを表示しないようにお願いしたいどうすればこれを達成できますか?

RequestOptionArgsはインターフェース

export interface RequestOptionsArgs { 
    url?: string; 
    method?: string | RequestMethod; 
    search?: string | URLSearchParams; 
    headers?: Headers; 
    body?: any; 
    withCredentials?: boolean; 
    responseType?: ResponseContentType; 
} 

あるしかし、私はおそらくロードインジケーターを表示するかどうかを伝える方法として、これらの変数のいずれかを使用するべきではありません。

私は何ができますか?

答えて

1

サービスでhttpサービスを使用するhttp要求を作成すると、元のサービスを無効にする必要はありません。

loadingServiceloadingServiceの2つの方法を作成します。

requestWithLoading(url: string|Request, options?: RequestOptionsArgs): Observable<Response> { 
    this.loadingService.start(); 

    if (!options) { 
     options = {}; 
     options.headers = new Headers(); 
    } 
    this.updateHeaders(options.headers); 
    if (typeof url !== 'string') { 
     this.updateHeaders(url.headers); 
    } 

    return http.request(url, options) 
     .catch((response: Response) => this.authError(response)) 
     .finally(() => { 
      this.loadingService.done(); 
     }); 
} 

requestNonLoading(url: string|Request, options?: RequestOptionsArgs): Observable<Response> { 

    if (!options) { 
     options = {}; 
     options.headers = new Headers(); 
    } 
    this.updateHeaders(options.headers); 
    if (typeof url !== 'string') { 
     this.updateHeaders(url.headers); 
    } 

    return http.request(url, options) 
     .catch((response: Response) => this.authError(response)) 
     .finally(() => {}); 
} 
+0

オリジナルのHttpサービスをラップし、拡張しないのがおそらく最良のアプローチです。ありがとうございます。 – Alex

0

1.Solution:あなたのコンポーネントにthis.loadingService.start();動きます。

2.解決策:そうでなければ1つのペラをisLoading :boolean = trueに設定します。これに基づいて

request(url: string|Request, options?: RequestOptionsArgs, isLoading:boolean = true): Observable<Response> { 
    if(isLoading){ 
    this.loadingService.start(); 
    } 


    if (!options) { 
     options = {}; 
     options.headers = new Headers(); 
    } 
    this.updateHeaders(options.headers); 
    if (typeof url !== 'string') { 
     this.updateHeaders(url.headers); 
    } 

    return super.request(url, options) 
     .catch((response: Response) => this.authError(response)) 
     .finally(() => { 
      this.loadingService.done(); 
     }); 
} 

設定のデフォルト値は、より多くのです。

関連する問題