可以使用APP_INITIALIZER服务的多提供者来解决此问题。我们可以定义一个提供者,该提供者将返回一个Promise,该Promise将等待AuthInterceptor类的初始化。
以下是代码示例:
import { Injectable } from '@angular/core';
@Injectable() export class AuthInterceptor { constructor() { }
intercept(request: HttpRequest
import { NgModule, APP_INITIALIZER } from '@angular/core'; import { AuthInterceptor } from './auth.interceptor';
function initAuthInterceptor(authInterceptor: AuthInterceptor): () => Promise
@NgModule({ imports: [ ... ], declarations: [ ... ], providers: [ AuthInterceptor, { provide: APP_INITIALIZER, useFactory: initAuthInterceptor, deps: [AuthInterceptor], multi: true } ], bootstrap: [ ... ] }) export class AppModule { }
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { AppComponent } from './app.component'; import { AuthInterceptor } from './auth.interceptor';
@NgModule({ imports: [ BrowserModule, HttpClientModule ], declarations: [ AppComponent ], providers: [ { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true } ], bootstrap: [ AppComponent ] }) export class AppModule { }
现在,AuthService可以在APP_INITIALIZER服务初始化之前初始化拦截器,并且拦截器将正常运