根据Angular Docs,您可以在需要提供者时注入不同的对象。当我找到这样做的充分理由时,我发现的唯一信息如下:
假设旧组件依赖于OldLogger类[...],但由于某种原因,您无法更新旧组件以使用它。
我仍然怀疑。在某些情况下,为什么我无法更新旧组件?如果组件或指令期望一个类而我们注入另一个类并不危险?使用provide
和useClass
至关重要的情况是什么?
答案 0 :(得分:4)
在我的情况下,当我需要实现除angular提供的默认类之外的不同逻辑时,我会使用它。例如,ErrorHandler是用于处理Angular 2+中的错误的默认类,但我喜欢使用我的自定义类来处理错误所以我使用
{ provide: ErrorHandler, useClass: MyErrorHandler }
它将告诉angular使用MyErrorHandler类而不是ErrorHandler
答案 1 :(得分:2)
useClass
用于提供替代实施
{ provide: MyClass, useClass: MyMockClass }
这意味着当MyClass
是应该注入实例的构造函数参数的类型时,会注入MyMockClass
实例。
useValue
是让Angular使用自定义实例创建逻辑
providers: [
DebA,
DebB,
{ provide: MyClass, useValue: (a, b) => new MyClass(a, b), deps: [DepA, DebB] }
]
或
{ provide: 'myServerPort', useValue: 8080 }
如果'myServerPort'
不可用,Angular将无法为useValue
提供值。