从将在AppModule中提供服务的Angular 5更改为在@Injectable装饰器中设置“provideIn”键的Angular 6,我将所有服务更改为使用新的“provideIn”方法。但是,我的拦截器服务是异常(exception)。

如何为“root”提供HTTP_INTERCEPTORS token 并使用InterceptorService?

这是我使用atm的Angular 5方式:

@Injectable()
export class InterceptorService implements HttpInterceptor {
...
}

在AppModule中:
providers: [{
  provide: HTTP_INTERCEPTORS,
  useClass: InterceptorService,
  multi: true
}]

但是Angular 6的方式是什么?

我已经尝试过类似的东西
@Injectable({
  provideIn: 'root',
  useValue: HTTP_INTERCEPTORS,
  deps: [forwardRef(() => InterceptorService)]
})
export class InterceptorService implements HttpInterceptor {
...
}

和许多其他带有Injectable的变体,但似乎无法弄清楚如何在不将对象常量直接写入模块提供程序中的情况下使其工作。

最佳答案

Angular 6的provideIn-属性只是Angular 5中的行为的补充。如果您想使用现有的InjectionToken提供某些内容,则仍然必须使用{ provide: ClassA, useClass: ClassB }语法。

参见-> https://angular.io/guide/dependency-injection-in-action#external-module-configuration

tl; dr:
在Angular 6中,您提供HTTP_INTERCEPTORS的方式没有改变,并且没有“Angular 6”方式。

关于Angular 6 : provide HTTP_INTERCEPTORS for 'root' ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50211120/

10-08 22:55