与功能请求相关的@angular/*包有哪些?
@angular/core
描述
目前,唯一添加可投影节点的方法是将其设置在createComponent变体之一(ViewContainerRef.createComponent, createComponent ...)中。
这种方法的问题在于,当动态创建多个嵌套组件时,无法正确获取注入层次结构(例如:https://stackblitz.com/edit/angular-xh1j19?file=src%2Fmain.ts)。
因此,无法动态重现以下场景:
<cmp1>
<cmp2/>
</cmp1>
我们能做的最好的事情是:
const cmp2 = viewContainerRef.createComponent(Cmp2, /* { injector: NEED_INJECTOR_OF_CMP1_HERE } */ );
const cmp1 = viewContainerRef.createComponent(Cmp1, { projectableNodes: [[cmp2.location.nativeElement]]});
但如果CMP1具有组件提供程序,这将是一个问题。
要获得与声明式方法相同的注入层次结构,我们需要类似的东西:
const cmp1 = viewContainerRef.createComponent(Cmp1);
const cmp2 = viewContainerRef.createComponent(Cmp2, { injector: cmp1.injector } );
cmp1.setProjectableNodes([[cmp2.location.nativeElement]]);
所以缺少类似于ComponentRef.setProjectableNodes的方法。
建议的解决方案
向 ComponentRef
添加一个方法 setProjectableNodes
;
这允许按照模板中的顺序创建组件,因此可以正确获取注入层次结构。
1条答案
按热度按时间lnxxn5zx1#
有趣的是,出于笔记的目的,我想引用我的问题,因为这个问题在动态渲染过程中非常有用:#51491