如何在没有预先确定的ViewContainerRef的情况下向DOM动态添加角度分量?

时间:2019-04-17 13:51:59

标签: javascript angular dom angular-dynamic-components

  • 这是我发现对他人有用的解决方案。

  • 这可以应用于未设置ViewContainerRef的任何本机元素。

我试图在单击事件中将角度组件植入表(Tabulator v4.2)中。该表是由插件动态创建的,因此我无权访问需要为其设置角度ViewContainerRef的DOM元素。 在click事件回调中,我可以访问要向其中添加角度分量的元素。

如何在未设置角度ViewContainerRef的情况下向该元素添加角度分量?

每次单击都应创建一个新组件,并将其设置在给定的DOM元素内。

1 个答案:

答案 0 :(得分:3)

我使用Angular渲染器和Angular动态组件解决了它。 Angular Dynamic Component Loader

父组件HTML

<ng-template #willContainTheChildComponent></ng-template>

父组件类

@ViewChild('willContainTheChildComponent', {read: ViewContainerRef}) willContainTheChildComponent: ViewContainerRef;

constructor(private componentFactoryResolver: ComponentFactoryResolver,
    private renderer: Renderer2) {
}



//The click handler
            onClick: (e, row) => {
                const componentFactory = this.componentFactoryResolver.resolveComponentFactory(TheComponentClass);
                const component = this.willContainTheChildComponent.createComponent(componentFactory);
                //Here I have access to component.instance to manipulate the class' contents
                this.renderer.appendChild(row.getElement(), component.location.nativeElement);
            }