angular - multi :true mean in providers in angular4 是什么意思

标签 angular angular4-httpclient angular-providers

我在 angular4 中使用 HTTP_INTERCEPTORS。为此,我创建了实现 HttpInterceptor 接口(interface)的 HttpServiceInterceptor 类,并提供了 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是注入(inject) token ,这

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

使 FOO 注入(inject)依赖项是分配给此 token 的多个提供程序的数组,即与以下内容相同:

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

不同之处在于可以在同一个注入(inject)器的多个位置定义多供应商,所有额外的 { provide: FOO, multi: true, ... } 做一个 pushFOO 数组。

关于angular - multi :true mean in providers in angular4 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47747893/

相关文章:

angular - 没有简单组件的提供者

javascript - Ionic2 错误 : "No provider for Storage"

Angular 2引用@ContentChild的动态实例

angular 4 httpGet withCredentials 和 header 冲突

angular - 如何在 Angular 5(或 >4.3)中将 Http 转换为 HttpClient?

javascript - Angular 中不同类型的提供者配置

angular - 使用 HttpParams 和 FromObject 有条件地添加参数并使用变量作为键名

Angular Material 最大长度验证

angular - 如何使用 adal-angular5 在 angular 5 中刷新 token

angular - 如何在 Angular 的提供程序配置期间从 useFactory 函数进行 HTTP 调用?