如何仅为子模块导入Angular HTTP拦截器

时间:2018-11-14 17:24:47

标签: angular http httpclient interceptor angular-http-interceptors

我已经在AppModule中导入了HttpClientModule。

import { HttpClientModule } from '@angular/common/http';

export const AppRoutes: Routes = [
  { path: '', redirectTo: 'dashboard', pathMatch: 'full' },
  {
    path: 'account',
    loadChildren: './auth/auth.module#AuthModule'
  },
  {
    path: 'dashboard',
    loadChildren: './content/content.module#ContentModule'
  }
];

一旦我启动站点,它将重定向到我添加了HTTP拦截器的仪表板模块(延迟加载的模块)。

import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { HttpInterceptorService } from '../services/http-interceptor.service';
@NgModule({
providers : [
      { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, multi: true }
    ]
})

但是它不起作用。谁能帮我吗?

1 个答案:

答案 0 :(得分:0)

Http拦截器只是一项服务,将其注入到任何模块上都没有任何区别-只需在AppModule中进行同样的操作即可帮助您工作-如果遇到相同的问题,您可以尝试像下面那样在共享模块上注入

要实现的常见模式不是直接在@NgModule声明中公开提供程序,而是在诸如此类的静态forRoot函数中公开该提供程序:

export class SharedModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: SharedModule,
      providers: [
         { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, multi: true }
      ]
    };
  }
}

然后您可以像SharedModule一样在AppModule上导入SharedModule.forRoot()

希望这行得通-编码愉快