如何使用NgTemplateOutlet获取ViewChildren的工作效果? (4.0.0-RC1)

时间:2017-03-01 10:54:13

标签: angular

我想用NgTemplateOutlet创建孩子。

我有这个example plunkr,其中我有子组件和父组件,Parent有一个使用ngTemplateOutlet呈现的输入模板:

@Component({
  selector: 'parent',
  template: `
    <div>parent</div>
    <ng-container *ngTemplateOutlet="template1"></ng-container>
    <div *ngFor="let child of children; let i = index">{{i}}</div>
    {{children.length}}    
`
})
export class Parent {
  @Input() template1; 
  children = [];
  @ViewChildren(Child) viewList: QueryList<Child>;

  updateElements() {
    setTimeout(() => this.children = this.viewList.toArray());
  }

  ngAfterViewInit() {
    this.viewList.changes.subscribe(() => this.updateElements());
    this.updateElements();
  }      
}

父组件试图让Child个孩子使用ViewChildren,但不能正常工作。

有人知道如何上班吗?

另一方面,我写了other plunkr,其中我使用ngFor渲染了几个子组件并且它有效。

由于两者,ngFor和ngTemplateOutlet,使用viewContainerRef.createEmbeddedView我认为两种方式应该以相同的方式工作。

为什么不呢?

PS:我使用的是Angular 4.0.0-rc1,但我认为Angular 2.x也是如此

1 个答案:

答案 0 :(得分:-2)

与此同时,您可以使用将父级注入子级的解决方法。