gpt4 book ai didi

Angular - 通过@Input 属性进行依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-03 14:14:20 28 4
gpt4 key购买 nike

@Input 中注入(inject)“服务”依赖项是一种好习惯吗?特性?此上下文中的服务不是在根级别管理的单例实例,而是接口(interface)的不同实现的多个实例。
考虑以下示例:在 Angular 库中,ShapeComponent 依赖于 ShapeService(接口(interface))。
组件

@Component({
selector: 'ex-shape',
templateUrl: '..',
})

export class ShapeComponent {
constructor(shapeServiceCtor: ShapeService)

@Input shapeServiceInput: ShapeService;
}
解决依赖关系的一种简单方法是设置输入属性,如下面的代码所示。
<ex-shape [shapeServiceInput]="rectangleShapeService" />
<ex-shape [shapeServiceInput]="ellipseShapeService" />
<ex-shape [shapeServiceInput]="polygonShapeService" />
上述方法是否适用于解决组件中的依赖关系?
如果使用输入属性方法,那么服务/依赖项必须以相同的方式传播到子组件。这种方法的缺点是父组件必须接受所有依赖项作为输入属性。
是否有任何推荐的方法来在库级别注入(inject)和作用域依赖项?

最佳答案

此时您并没有真正使用 Angular 的依赖注入(inject),在您的情况下,我不确定这是好是坏。
如果 ShapeComponent 无法知道它正在使用哪个服务实例,并且任何时候调用它都需要传递一个任意实例,这应该没问题。
如果 ShapeComponent 的父级总是传递相同的服务实例,则父级可以将它包含在它的 providers 中。数组,然后子 ShapeComponents 将使用相同的实例。
Angular 的文档在 DI Hierarchy https://angular.io/guide/hierarchical-dependency-injection 上有一些更详细的信息。
您调用constructor(shapeServiceCtor: ShapeService)也会导致一些困惑,因为组件将同时注入(inject)一个 DI,以及来自 @Input 的另一个(或可能相同)实例。

关于Angular - 通过@Input 属性进行依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62717425/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com