Angular 4.3
プロジェクトには、パブリックサイトコンポーネントとセキュリティで保護されたサイト(ログイン済み)コンポーネントが別々に用意されています。我々は@angular/common/http
を使用します。我々は、public-site
コンポーネントとsecured-site
コンポーネントに対して異なるhttpインターセプタを実装したいと考えています。例えば、角4.3でHttpClientの2つのインスタンス(2つのインターセプタと1つのインターセプタを持つもの)を使用するにはどうすればよいですか?
- 公開サイト成分は - のみインターセプタ
LoggingInterceptor
- 固定サイトの部品の下に適用する - 要求ヘッダーに認証トークンを渡すために、2つのインターセプタ
LoggingInterceptor
AuthTokenInterceptor
(下に適用します)
各コンポーネントレベルでプロバイダの詳細HTTP_INTERCEPTORS
を追加しようとしました@Component
と異なるインターセプタを使用します。しかし、要求はいずれのインターセプタにも入っていません。
@NgModule
にプロバイダの詳細HTTP_INTERCEPTORS
を追加した場合にのみ、リクエストがインターセプタに送信されます。ここで問題となるのは、パブリックサイトのHTTP要求もAuthTokenInterceptor
に入りますが、これは不要です。
これをどのように解決する必要がありますか?ありがとう。
ありがとう@Kuncevic。パブリックサイトのコンポーネント要求を区別するための条件を見つけます。しかし、@ Componentレベル(@ NgModuleから削除)にHTTP_INTERCEPTORSプロバイダを追加し、そのコンポーネントのngOnInitメソッド内でhttp呼び出しを行うと、インターセプタが呼び出されないという疑問があります。同じコード行(プロバイダ)を@ NgModuleに移動すると、インターセプタが動作しています。 HTTP_INTERCEPTORSプロバイダはNgModuleでのみ設定する必要がありますか? – Samy
これは依存性注入の仕組みです。あなたの 'public-site'と' secured-site'を 'modules'を分けて置いても、明らかに' app.module'で宣言し、 'public-site.module'であなたに言う必要があります'interceptor1'と' secured-site.module'で 'interceptor1'と' interceptor2'を指定すると、 'interceptor1'を2回呼び出すことになります。しかし、各遅延ロードモジュールが独自のインジェクションツリーを持っているので、各モジュールを遅延ロードするようにすると、そうした場合にプロバイダが干渉しません。 – Kuncevic
しかし、私はあなたの問題を '遅延読み込み'モジュールを '遅延読み込み'として別の目的に役立てることを推奨しません。あなたの 'lazy laded'モジュールのそれぞれに' httpインターセプタ '/' provider 'の異なるセットを適用するために 'lazy loading'を使うのはお勧めできません。 – Kuncevic