我阅读了几篇关于 Angular 中两种类型的注入器层次结构的文章 -
ElementInjector
和 EnvironmentInjector
层次结构,以及它们提供的依赖项类型,以及当首先在 ElementInjector
层次结构中找不到某些依赖项时如何处理,然后在 EnvironmentInjector
层次结构中查找它们。而且,如果我理解正确的话,EnvironmentInjector
层次结构由 - 组成
RootInjector -> PlatformInjector -> NullInjector
我对
ViewContainerRef
、ElementRef
等东西很好奇。这些既不是用户定义的依赖项,也不是特定于平台的任何东西。那么哪个注入器将它们注入到我的组件/指令中?
ElementRef
和ViewContainerRef
都是特殊的令牌,因为它们存储在TNode中。它们不像常规 DI 代币那样提供。
export function injectViewContainerRef(): ViewContainerRef {
const previousTNode = getCurrentTNode() as TElementNode | TElementContainerNode | TContainerNode;
return createContainerRef(previousTNode, getLView());
}
export function injectElementRef(): ElementRef {
return createElementRef(getCurrentTNode()!, getLView());
}