是否可以在Angular 5中注册多个拦截器?

时间:2018-05-20 09:34:25

标签: angular interceptor

我试图将HTTP拦截器添加到现有的Angular应用程序中。

重点是,它已经提供了一个拦截器:

  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: CustomInterceptor,
      multi: true
    }, 
    AuthGuard, AuthService, AuthenticationInterceptor],

就我所知的拦截概念而言,它们可以互相管道传递。因此我尝试了这个:

  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: CustomInterceptor, // existing interceptor
      multi: true
    }, AuthGuard, AuthService,
    {
      provide: HTTP_INTERCEPTORS,
      useClass: AuthenticationInterceptor, // my interceptor
      multi: true
    }],

事情正在发挥作用。但我不确定我是否覆盖了现有的拦截器。在Angular 5中注册多个拦截器是否可以?他们互相取消了吗?或者他们只是作为管道中的工作站工作并相互增强?

1 个答案:

答案 0 :(得分:6)

TL; DR 是的,提供多个拦截器很好,它们按顺序运行。

  

但是我不确定我是否已经覆盖了现有的拦截器。

通过运行代码并检查,您可以看到是否发生这种情况。无论如何,documentation明确指出在讨论他们的顺序时可能会有多个拦截器:

  

Angular按照您提供的顺序应用拦截器。如果您提供拦截器A,则B,然后C,请求将在A-> B-> C中流动,并且响应将流出C-> B-> A.

在上面几段相同的文档中,还解释了multi选项与此相关:

  

注意multi:true选项。这个必需的设置告诉Angular,HTTP_INTERCEPTORS是一个多提供者的标记,它注入一个值数组,而不是一个值。

可以找到此标志的文档here