11

HTTP_INTERCEPTORS在angular4中使用。为此,我创建HttpServiceInterceptor了实现HttpInterceptor接口并提供intercept方法定义的类。HTTP_INTERCEPTORS然后像这样注册提供者

providers: [{
    provide: HTTP_INTERCEPTORS,
    useClass: HttpServiceInterceptor,
    multi: true
}],

这工作正常。但是我还是不明白multi:true这里是什么意思?我已阅读此答案

如果我删除multi:true选项,则浏览器端出现错误

Uncaught Error: Provider parse errors:
Mixing multi and non multi provider is not possible for token InjectionToken_HTTP_INTERCEPTORS ("[ERROR ->]"): in NgModule AppModule in ./AppModule@-1:-1
    at NgModuleProviderAnalyzer.webpackJsonp.487.NgModuleProviderAnalyzer.parse (vendor.js:36335)
    at NgModuleCompiler.webpackJsonp.487.NgModuleCompiler.compile (vendor.js:43184)
    at JitCompiler.webpackJsonp.487.JitCompiler._compileModule (vendor.js:51527)
    at vendor.js:51472
    at Object.then (vendor.js:26354)
    at JitCompiler.webpackJsonp.487.JitCompiler._compileModuleAndComponents (vendor.js:51470)
    at JitCompiler.webpackJsonp.487.JitCompiler.compileModuleAsync (vendor.js:51399)
    at PlatformRef_.webpackJsonp.0.PlatformRef_._bootstrapModuleWithZone (vendor.js:4746)
    at PlatformRef_.webpackJsonp.0.PlatformRef_.bootstrapModule (vendor.js:4732)
    at Object.<anonymous> (app.js:23366)

这是否意味着HTTP_INTERCEPTORS初始化多个指令或组件的多提供者?如果是这样,那么其他指令和组件是什么?

4

1 回答 1

11

多提供者与指令无关。该答案仅作为示例提及指令。

考虑到这FOO是注入令牌,这

providers: [
  { provide: FOO, useClass: Bar, multi: true },
  { provide: FOO, useClass: Baz, multi: true }
]

使FOO注入的依赖项成为分配给此令牌的多个提供者的数组,即与以下内容相同:

providers: [
  { provide: FOO, useValue: [Bar, Baz] }
]

不同之处在于,可以在同一个注入器的多个位置定义多个提供者,并且所有额外{ provide: FOO, multi: true, ... }的都做一个pushtoFOO数组。

于 2017-12-11T20:13:56.620 回答