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>