我想用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也是如此
答案 0 :(得分:-2)
与此同时,您可以使用将父级注入子级的解决方法。