ViewContainerRef& createEmbeddedView澄清?

时间:2017-05-26 13:13:22

标签: javascript angular

我有一个组件:

@Component({
  selector: 'vcrdi',
  template: `
    <template #tpl>
       <h1>ViewContainerRef DI</h1>
    </template>

  `,
})
export class VcrDIComponent {
  @ViewChild('tpl') tpl;

  constructor(private _vcr: ViewContainerRef) {console.log(_vcr)}

  ngAfterViewInit() {
    this._vcr.createEmbeddedView(this.tpl);
  }
}

此组件在主my-app元素中用作:

@Component({
  selector: 'my-app',
  template: `
        <vcrdi></vcrdi>
  `,
})

vcrdi组件中的Ctor注入了_vcr: ViewContainerRef,所以现在容器是实际的<vcrdi>...</vcrdi>元素。

这是渲染的DOM:

enter image description here

请注意,h1ViewContainerRef之后插入的vcrdi

我们转到docs

  

createEmbeddedView(templateRef: TemplateRef<C>, context?: C, index?: number) : EmbeddedViewRef<C>
  实例化基于templateRef的嵌入式视图,并在指定的位置将其插入此容器   索引。

     

如果未指定index,则新视图将作为最后一个插入   在容器中查看

好吧,如果vcrdi是容器引用,那么我没有看到任何注入其中:

<vcrdi>
   // If vcrdi ^  is the container  , then why does this section  empty ?
</vcrdi>

问题:

文档说明有些东西被注入容器中 但是如果vcrdi是容器,并且我们看到没有注入 - 但是附加 - 那么 - 我在这里缺少什么?

Demo PLNKER

1 个答案:

答案 0 :(得分:0)

对于vcrdi组件,视图容器为<my-app></my-app>

解释和示例:https://netbasal.com/angular-2-understanding-viewcontainerref-acc183f3b682