angular - 是否可以在嵌套的惰性模块中使用 HTTP_INTERCEPTORS?
问题描述
我有一个FooModule
嵌套在AppModule
:
AppModule
:
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.model';
@NgModule({
imports: [
AppRoutingModule
],
bootstrap: [AppComponent]
})
export class AppModule { }
FooModule
:
import { NgModule } from '@angular/core';
import { AuthInterceptorService } from '../auth/auth-interceptor.service';
import { HTTP_INTERCEPTORS } from '@angular/common/http';
@NgModule({
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: AuthInterceptorService,
multi: true
}
]
})
export class FooModule {}
FooModule
正在通过延迟加载加载:
AppRoutingModule
:
const appRoutes : Routes = [
{
path: "foos",
loadChildren: () =>
import("./foos/foos.module").then(m => m.FoosModule)
}
]
@NgModule({
imports: [RouterModule.forRoot(appRoutes, { preloadingStrategy: PreloadAllModules })],
exports: [RouterModule]
})
export class AppRoutingModule {
}
但只有当我移动HTTP_INTERCEPTORS
到AppModule
http-s 时才会被拦截,有没有办法让拦截器从FooModule
.
我要求拦截器执行添加授权的特定工作,该授权仅与FooModule
.
解决方案
看起来可以HTTP_INTERCEPTORS
通过嵌套的延迟加载模块加载,我只是缺少HttpClientModule
嵌套模块内部的导入:
@NgModule({
import: HttpClientModule,
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: AuthInterceptorService,
multi: true
}
]
})
export class FooModule {}
但是,因为HttpClientModule
是单例,所以它应该只定义一次,最好的地方是 inside AppModule
。因此,我最终移动了拦截器和要从中导入的 http 客户端,AppModule
同时基于以下内容修改resolve
为条件解析器req.url
:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (req.url == this._config.SecretAPI) {
//Add Authorization Header:
const modifiedReq = req.clone({
headers: new HttpHeaders().set('Authorization', this._authService.authorizationHeaderValue)
});
return next.handle(modifiedReq);
}
else {
return next.handle(modifiedReq);
}
}
推荐阅读
- ios - 无法在 Xcode Objective-c 中将按钮连接到 wkwebview
- c - 使用 NULL 指针初始化数组并引发 GCC 抛出错误
- amazon-web-services - Lambda 中对 ApiGateway 的请求导致无法满足请求
- javascript - iFrame 变为空
- java - 如何使用 OjAlgo 在 OperateOnAll 上使用 abs、sqrt 等?
- java - 在另一个 Activity 中使用 RecyclerViewAdapter 的 ArrayList
- javascript - 使用方法作为过滤器的回调函数会影响回调的范围
- javascript - 否定墨卡托投影
- angular - 在 Angular 中以 Angular 反应形式创建表格
- python - SciPy 的 trust-constr 忽略了我的约束