【发布时间】:2020-09-28 01:22:57
【问题描述】:
我正在尝试了解 Angular 的 DI 框架并参考https://angular.io/guide/hierarchical-dependency-injection 中的官方文档;特别是 viewProviders 和 providers 属性之间的区别。
虽然我不能说内容很容易理解(尤其是它解释了它如何使用组合逻辑树并在 <#VIEW> 中使用符号 @Provide 和 @Inject 的部分有时在组件的选择器标签中),我得出结论,使用 viewProviders 而不是提供程序会影响使用 <ng-content> 的投影内容的呈现@
谈到这个问题,如果 在提供程序和 viewProviders 中都使用相同的 DI 令牌,我看不到对场景的解释。
例如。
参考 parent.component.ts 中的 sn-p,我的问题是:如果通过取消注释 providers 属性能够呈现元素注入器中配置的值“world”,而不是模块注入器中的值“hello”,为什么忽略值“angular”?
viewProviders: [{ provide: Service, useValue: { value: 'world' } }],
// providers: [{ provide: Service , useValue: { value: 'angular' } }], // If I uncomment this line the "hello" changes to "world" and the value "angular" is disregarded
在https://stackblitz.com/edit/angular-syh4mx
这可能不是一个有效的用例,但我有兴趣了解它为什么会这样。
【问题讨论】:
标签: angular dependency-injection