2016-12-07 7 views
2

私はAngular2を使ってwebappを構築しています。Angular2:すべてのHTTPリクエストを購読する

Angular2がHTTPリクエストを行うたびに関数を実行できますか?

これは、JWTトークンをリフレッシュする必要があるかどうかをチェックするために使用されます。

ありがとうございます!あなたがコンポーネントまたは他のサービスが購読することができ、それはイベントに要求が

@Injectable() 
class NotifyingHttp extends Http { 
    requestSent:Subject = new Subject(); 
    requestCompleted:Subject = new Subject(); 
    constructor(_backend: ConnectionBackend, _defaultOptions: RequestOptions) { 
    super(_backend, _defaultOptions); 
    } 

    get(url: string, options?: RequestOptionsArgs) : Observable<Response> { 
    this.requestSent.next(url); 
    return super.get(newUrl, options) 
    .finally(response => this.requestCompleted.next(url)); 
    } 

    post(...) 
    ... 
} 

各メソッドは、これをオーバーライドする必要が行われるたびに放出することを、観察を提供するカスタムHttpクラスを使用することができます

答えて

4

:道(ポストを取得し、...)

あなたはその後、AppModuleの輸入に追加することによって活性化された共有モジュールを作成することができます

@NgModule({ 
    imports: [BrowserModule, NotifyingHttpModule], 
    declarations: [AppModule], 
    bootstrap: [AppModule] 
}) 
export class AppModule {} 

はあなたが工場を使用する必要がAngular2 : The responses to HTTP get requests are being cached in IE

+0

も参照してください。 Httpの拡張カスタムクラスコンストラクタ([これに関連する](http://stackoverflow.com/a/40295956/2587435))ではなく、HttpコンストラクタがAngularによって呼び出されるようになります。だから、あなたは工場を使い、あなた自身で作成する必要があります。 ConnectionBackendはインターフェイス(そのトークンのプロバイダなし)なので、ファクトリにはXHRBackendを使用する必要があります。 –

+0

これは、プロバイダ{{provide:ConnectionBackend:useClass XhrBackend}}を追加しなければならなかった理由を説明するかもしれませんが、それは(私が最近作成したプランカのテストに従って) –

関連する問題