【发布时间】:2020-12-25 23:31:51
【问题描述】:
我认为一个指令的本地提供者是为其内容子提供服务,例如:
//template in a module
<table>
<tr>
<td>{{ item.price | myPipe }}</td>
</tr>
</table>
myPipe 在其构造函数中具有MyService 的依赖关系:
因此,如果我将指令定义为:
@Directive({
selector: "[myAttr]",
providers: [MyService]
})
export class MyDirective { }
并将其应用为:
<table>
<tr myAttr>
<td>{{ item.price | myPipe }}</td>
</tr>
</table>
那么myPipe的构造函数中的MyService就可以解析了。
但是如果有一个组件也在其本地提供者中定义MyService并将其应用为:
<myComponent>
<tr myAttr>
<td>{{ item.price | myPipe }}</td>
</tr>
</myComponent>
既然MyDirective和MyComponent都可以为myPipe提供服务,那么myPipe会选择哪一个,MyDirective或MyComponent的本地提供者?
【问题讨论】:
-
关于一个非常令人困惑的话题的好问题。请参阅我的回答,希望能在您的具体案例中突出问题的实际方面。遗憾的是,很难编写深入的解释,并且与 Angular 自己的文档相当,我鼓励您阅读:angular.io/guide/… 和 angular.io/guide/hierarchical-dependency-injection。此外,如果有类似的不确定性,最好的办法之一是尝试不同的场景,这就是我所做的 - 你可以确切地看到它是如何工作的。