🌟

provideHttpClientの使い方

2023/08/14に公開

AngularではHttpClientを使いたい時、 HttpClientModule をimportするのが主な方法だったが、
Angular 15から provideHttpClient()providers に書くだけでも可能となった。
その際、 Interceptorなどの設定で引っかかったのでメモ。

今までのInterceptorを使う

HttpClientModuleの時には providers
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
という感じに書いておけばInterceptorが機能したが、 provideHttpClient() だと機能しない。
この形式のInterceptorを使いたい場合、 withInterceptorsFromDi() を入れる。

providers: [
  provideHttpClient(withInterceptorsFromDi())
];

関数型Interceptorを使う

Guardが関数で完結できるようになったのと同じように、 provideHttpClient() を使うことでInterceptorも関数のみで完結できるようになる。
関数型Interceptorを使いたい場合、 withInterceptors を用いる。

providers: [
  provideHttpClient(withInterceptors([AuthInterceptor]))
];

ちなみに関数型Interceptorは

export function interceptor(req: HttpRequest<any>,next: HttpHandlerFn): Observable<HttpEvent<any>>{
   const fooService = inject(FooService)
   省略
}

という感じで定義できる。

その他

公式APIドキュメントに載ってるオプションぽいやつ。動作は未確認

withXsrfConfiguration

withXsrfConfiguration({ cookieName?: string; headerName?: string; })

Xsrf-tokenをどこから取得するかの設定ができるっぽい。
Angularは同じOriginじゃないと自動でXsrf-tokenを入れてくれないが、それはこれでも変更できなさそう?

withNoXsrfProtection

withNoXsrfProtection()

Xsrf-tokenの自動入れ込みを止めるオプション

withJsonpSupport

withJsonpSupport()

JSONPのサポートを有効

withRequestsMadeViaParent

withRequestsMadeViaParent()

まだ Developer Preview。HttpClientは常に新しいインスタンスで注入されるけど、このオプションを使うと既に存在するHttpClientインスタンスが使われるらしい。
この英語記事 によるとInterceptorをLazyloadモジュール内で使うのに使えるらしい

withFetch

withFetch()

同じく Developer Preview。 FetchAPIを使うようにするフラグ

Discussion