multi:true 在 angular4 中的提供者中意味着什么
What does multi:true mean in providers in angular4
我在 angular4 中使用 HTTP_INTERCEPTORS
。为此,我创建了 HttpServiceInterceptor
class 来实现 HttpInterceptor
接口并提供 intercept
方法的定义。然后像这样
为HTTP_INTERCEPTORS
注册供应商
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: HttpServiceInterceptor,
multi: true
}],
这工作正常。但是我还是不明白 multi:true
这里是什么意思?我已阅读 this answer。
如果我删除 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
是初始化多个指令或组件的多提供程序?如果是,那么其他指令和组件是什么?
多提供商与指令无关。 This answer 提及指令仅作为示例。
考虑到FOO
是injection token,这个
providers: [
{ provide: FOO, useClass: Bar, multi: true },
{ provide: FOO, useClass: Baz, multi: true }
]
使 FOO
注入依赖项成为分配给此令牌的多个提供程序的数组,即与以下内容相同:
providers: [
{ provide: FOO, useValue: [Bar, Baz] }
]
不同之处在于可以在同一个注入器的多个位置定义多个供应商,并且所有额外的 { provide: FOO, multi: true, ... }
做一个 push
到 FOO
数组。
我在 angular4 中使用 HTTP_INTERCEPTORS
。为此,我创建了 HttpServiceInterceptor
class 来实现 HttpInterceptor
接口并提供 intercept
方法的定义。然后像这样
HTTP_INTERCEPTORS
注册供应商
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: HttpServiceInterceptor,
multi: true
}],
这工作正常。但是我还是不明白 multi:true
这里是什么意思?我已阅读 this answer。
如果我删除 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
是初始化多个指令或组件的多提供程序?如果是,那么其他指令和组件是什么?
多提供商与指令无关。 This answer 提及指令仅作为示例。
考虑到FOO
是injection token,这个
providers: [
{ provide: FOO, useClass: Bar, multi: true },
{ provide: FOO, useClass: Baz, multi: true }
]
使 FOO
注入依赖项成为分配给此令牌的多个提供程序的数组,即与以下内容相同:
providers: [
{ provide: FOO, useValue: [Bar, Baz] }
]
不同之处在于可以在同一个注入器的多个位置定义多个供应商,并且所有额外的 { provide: FOO, multi: true, ... }
做一个 push
到 FOO
数组。