10

有没有办法从动态创建的组件中获取 ViewContainerRef?我的动态创建的组件内部有一个 ngContent 元素,我想在动态创建后填充它。

export class Example {

  @ViewChild('content', { read: ViewContainerRef }) //normal way
  content: ViewContainerRef;

...

  ngAfterViewInit(){
    let box1=this.content.createComponent(this.boxFactory);
    box1.instance.title="Dynamic (1)";
    // HERE: the box1 has a ng-content area which i want to fill.
  }

}

我想一些手动方法来解决 ViewChild 而不是使用装饰器。一些想法?

非常感谢。

4

2 回答 2

2

我也不确定如何动态添加 viewchild。但是,如果动态 ViewContainerRef 是您想要的,您可以尝试使用此解决方案:

在 html 文件中创建:

  <div id="test"></div>

在您的组件中创建:

 let nodeElement = document.getElementById("test");
      let compFactory = this.componentFactoryResolver.resolveComponentFactory(ChildComponent);
      let component = compFactory.create(this.viewContainerRef.injector, null, nodeElement);
于 2017-12-11T10:33:41.450 回答
0

如果您阅读了这两篇文章,则可以回答您的问题,它为我解决了:

https://blog.angularindepth.com/here-is-how-to-get-viewcontainerref-before-viewchild-query-is-evaluated-f649e51315fb

https://blog.angularindepth.com/here-is-what-you-need-to-know-about-dynamic-components-in-angular-ac1e96167f9e

第二篇文章包含 Github 上的工作 Angular 示例,您可以在其中以 4 种不同方式查看动态创建的组件的工作示例。

于 2018-02-21T09:12:39.970 回答