Angular 通过多个指令提供服务时的优先规则是什么?

Angular 通过多个指令提供服务时的优先规则是什么?,angular,angular2-directives,angular2-di,Angular,Angular2 Directives,Angular2 Di,我希望能够通过添加指令来修改组件行为 <demo>Basic behaviour</demo> <demo dira>Modified behaviour</demo> 这确实有效,但我找不到一条规则,说明当有多个指令使用相同的令牌提供服务时会发生什么: <demo dira dirb></demo> 根据我的观察,似乎指令的提供程序总是优先于组件的提供程序。在指令之间,总是声明数组(而不是HTML中)中最后一个“赢

我希望能够通过添加指令来修改组件行为

<demo>Basic behaviour</demo>
<demo dira>Modified behaviour</demo>
这确实有效,但我找不到一条规则,说明当有多个指令使用相同的令牌提供服务时会发生什么:

<demo dira dirb></demo>

根据我的观察,似乎指令的提供程序总是优先于组件的提供程序。在指令之间,总是声明数组(而不是HTML中)中最后一个“赢”的指令

普朗克:


我的问题是,这种提供者覆盖是否得到支持,以及我是否至少可以依靠我的假设,指令提供的服务始终优先于组件提供的服务?

组件
DemoComponent
,并且当其子组件具有
SampleService
构造函数参数时,将获得
SampleService
注入

指令
DirADirective
将获得
SpecialSampleService
注入

DI查看具有提供程序构造函数参数的组件或指令。如果找不到匹配的提供者,它会继续查找父级,直到找到一个

最后一种方法是根作用域,在这里保存添加到
@NgModule()
的提供程序


所以优先规则是,自我,父母,父母的父母。。。根范围。

组件
DemoComponent
,当其子组件具有
SampleService
构造函数参数时,将注入
SampleService

指令
DirADirective
将获得
SpecialSampleService
注入

DI查看具有提供程序构造函数参数的组件或指令。如果找不到匹配的提供者,它会继续查找父级,直到找到一个

最后一种方法是根作用域,在这里保存添加到
@NgModule()
的提供程序


所以优先规则是,自我,父母,父母的父母。。。根范围。

关于组件树,指令与组件的关系是什么?他们是孩子、父母还是兄弟姐妹?根据我的测试,DemoComponent从它的DirADirective注入了SpecialSampleService,尽管它提供了自己的SampleService。因此,要么我不了解结果组件层次结构,要么不了解注入器合并组件及其指令的提供程序所依据的规则。它们是兄弟。“DemoComponent被注入SpecialSampleService”如果是这样的话,我也很惊讶。如果它们被添加到同一个元素,并且指令的提供程序被稍后添加并覆盖组件的提供程序,那么它们可能共享一个作用域。很有趣的案子,看起来是这样的。如果该指令没有提供程序(仅针对组件),则该指令仍然从组件获取提供程序,而我希望它抛出“找不到提供程序”。谢谢你的调查。我找不到关于这方面的任何文件,但我觉得这种行为是故意的。否则,如果一个指令不能被共享,它提供服务的意义是什么?关于组件树,指令与组件的关系是什么?他们是孩子、父母还是兄弟姐妹?根据我的测试,DemoComponent从它的DirADirective注入了SpecialSampleService,尽管它提供了自己的SampleService。因此,要么我不了解结果组件层次结构,要么不了解注入器合并组件及其指令的提供程序所依据的规则。它们是兄弟。“DemoComponent被注入SpecialSampleService”如果是这样的话,我也很惊讶。如果它们被添加到同一个元素,并且指令的提供程序被稍后添加并覆盖组件的提供程序,那么它们可能共享一个作用域。很有趣的案子,看起来是这样的。如果该指令没有提供程序(仅针对组件),则该指令仍然从组件获取提供程序,而我希望它抛出“找不到提供程序”。谢谢你的调查。我找不到关于这方面的任何文件,但我觉得这种行为是故意的。否则,如果指令不能被共享,那么它提供服务的意义何在?
<demo dira dirb></demo>