我试图将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中注册多个拦截器是否可以?他们互相取消了吗?或者他们只是作为管道中的工作站工作并相互增强?
答案 0 :(得分:6)
TL; DR 是的,提供多个拦截器很好,它们按顺序运行。
但是我不确定我是否已经覆盖了现有的拦截器。
通过运行代码并检查,您可以看到是否发生这种情况。无论如何,documentation明确指出在讨论他们的顺序时可能会有多个拦截器:
Angular按照您提供的顺序应用拦截器。如果您提供拦截器A,则B,然后C,请求将在A-> B-> C中流动,并且响应将流出C-> B-> A.
在上面几段相同的文档中,还解释了multi
选项与此相关:
注意multi:true选项。这个必需的设置告诉Angular,HTTP_INTERCEPTORS是一个多提供者的标记,它注入一个值数组,而不是一个值。
可以找到此标志的文档here。