2017-03-20 6 views
0

を購読しますhandleResponse(レスポンス)すべて正常に動作します。私が必要とするのは、現在の動作以外にresponseO.do(..)のチェックを行うためのすべてのリクエストです。Angular2は私がHTTP POSTメソッドをovverride HTTPクライアントを作成した二回

私もresponse.share()を試しました。このオブジェクトを購読することもできません。

私が探しているものを達成する方法はありますか?ありがとう。

答えて

1

確かに、あなたはdoインターセプターでObservableを購読していません。あなたが代わりにdoを使用するのでは、観測可能なのストリームデータを操作したい場合、あなたはおそらくmapを使用する必要があります

post(url, data):Observable<Response> { 
    let headers = new Headers(); 
    this.createAuthorizationHeader(headers); 
    var response = this.http.post("\\services" + url, data, { 
     headers: headers 
    }); 

    return this.handleResponse(response); 
} 

private handleResponse(responseO : Observable<Response>) { 
    return responseO.do(response => { 
     if (response.url.includes("LoginPage.html")) { 
      window.location.replace("../LoginPage.html"); 
     } 
    }); 
} 
1

doインターセプタで観察を返し 。これはストリームを操作するより反応的な方法です。

post(url, data):Observable<Response> { 
    let headers = new Headers(); 
    this.createAuthorizationHeader(headers); 
    var response = this.http.post("\\services" + url, data, { 
     headers: headers 
    }); 

    return response.map(res => handleResponse(res)); 
} 

private handleResponse(responseO : Response) : Response { 
    if (response.url.includes("LoginPage.html")) { 
     window.location.replace("../LoginPage.html"); 
    } 

    return responseO; 
} 

私はまた、アプリケーションを再起動することを意味し、リフレッシュするためにページを強制するために、角度2アプリでwindow.location.replaceを使用しないことをお勧めしたいと思います。角度ルータを使用してルートを変更すると、ナビゲートするときにアプリが読み込まれるのを待つ必要はありません。

関連する問題