Angular HTTP_拦截器的multi:true属性意味着什么?

Angular HTTP_拦截器的multi:true属性意味着什么?,angular,angular5,angular-http-interceptors,Angular,Angular5,Angular Http Interceptors,我对Angular是个新手,我刚刚建造了一个拦截器。根据多个教程,您必须在app.module中包含HTTP\u拦截器,如下所示: providers: [{ provide: HTTP_INTERCEPTORS, useClass: MyInterceptor, multi: true }] 我想知道这个multi:true属性意味着什么,以及它是否可以省略 我已经阅读了有关此属性的指南。他们解释如下: 我不明白这部分: 注意multi:true选项。此必需设置告诉Angular: HTTP

我对Angular是个新手,我刚刚建造了一个拦截器。根据多个教程,您必须在
app.module
中包含
HTTP\u拦截器
,如下所示:

providers: [{ provide: HTTP_INTERCEPTORS, useClass: MyInterceptor, multi: true }]
我想知道这个
multi:true
属性意味着什么,以及它是否可以省略

我已经阅读了有关此属性的指南。他们解释如下:

我不明白这部分:

注意multi:true选项。此必需设置告诉Angular: HTTP_拦截器是注入数组的多提供者的令牌 一个值,而不是一个值

这让我们对这个概念有了一些了解,但我还不太理解拦截器何时注入多个值,何时注入多个值。例如,我自己的拦截器只是在更改头。这是否意味着它只注入一个值

这是我的拦截器

import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { LoginService } from '../Services/login.service';


@Injectable()
export class JwtInterceptor implements HttpInterceptor {

    constructor(private loginService:LoginService){}

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        // add authorization header with jwt token if available
        console.log("ik zit nu in de interceptor");
        let currentUser = this.loginService.getToken();
        if (currentUser !=="") {

            request = request.clone({
                headers: new HttpHeaders({
                    'Content-Type': 'application/json', 
                    'Authorization': `Bearer ${currentUser}`
                })
            });
        }
        return next.handle(request);
    }
}

从界面的描述中,我们可以看到
multi
属性:

如果为true,
injector
返回实例数组。这是有用的 允许多个提供程序跨多个文件分布以提供 将配置信息添加到公共令牌

这意味着对于我们提供的令牌,将使用多个值(或类)

{
  provide: HTTP_INTERCEPTORS,
  useClass: ErrorInterceptor,
  multi: true
},
{
  provide: HTTP_INTERCEPTORS,
  useClass: SecurityInterceptor,
  multi: true
},
例如,请参阅(这是一个示例项目),其中为令牌
HTTP\u拦截器
指定了使用类(
useClass
ErrorInterceptor
SecurityInterceptor
。为了使其正常工作,我们需要指定
multi:true
,以便Angular知道将使用多个值(或类)

{
  provide: HTTP_INTERCEPTORS,
  useClass: ErrorInterceptor,
  multi: true
},
{
  provide: HTTP_INTERCEPTORS,
  useClass: SecurityInterceptor,
  multi: true
},
这里的一个关键点是,多提供者令牌。这意味着为该令牌提供新值或类时,需要属性
multi
,并且必须将其设置为
true

请参见文档中有关如何安装所述零件的说明:

注意
multi:true
选项。此所需设置告诉您 HTTP_拦截器是注入数组的多提供者的令牌 一个值,而不是一个值


好的,那么当我只有一个拦截器时,我可以将Multi设置为false,对吗?当我将Multi设置为false时,我会得到以下错误:
对于令牌注入令牌\u HTTP\u拦截器(“[error->]”):在NgModule AppModule中。/AppModule@-1:-1
。我不明白,因为提供商列表中没有其他拦截器。我确实提供了APP_BASE_REF,但我不确定这是否与错误有关。真奇怪。我想我最好还是把它设为true。@Maurice,是的,到目前为止,我还没有见过为
false
或省略提供具有此属性的拦截器。与其他提供者不同,您甚至可以忽略此属性。将场景视为您描述的场景(如果可能的话)会很有趣,其中使用值或类提供
HTTP\u拦截器
,但
multi
为false。也许如果你有一个github回购,删除一个链接,我来看看。请看我的开场白,我已经放置了拦截器并在其中提供了列表。@Maurice在angular文档中进一步挖掘后,我发现在令牌
HTTP\U拦截器的情况下,此属性是必需的,并且必须设置为
true
,因为它是一个多提供者令牌。我更新了我的答案,见最后一部分。