Ваше решение не работает, потому что вы используете одну ссылку с @ ViewChild , но вы находитесь внутри ng-For , поэтому вам нужно управлять QueryList ViewContainerRef с @ViewChildren.
Попробуйте изменить свой код следующим образом:
замените:
@ViewChild("dynamic", { static: false, read: ViewContainerRef }) ref;
@ViewChildren("dynamic") private button: QueryList<"dynamic">;
на:
@ViewChildren('dynamic', {read: ViewContainerRef}) public widgetTargets: QueryList<ViewContainerRef>;
, чтобы мы могли иметь ref для всех детей.
заменить:
ngAfterViewInit() {
const componentFactory = this._componentFactoryResolver.resolveComponentFactory(
HelloComponent
);
const ref = this.ref.createComponent(componentFactory);
}
на:
ngAfterViewInit() {
const targets = this.widgetTargets.toArray();
for (let i = 0; i < targets.length; i++) {
let target = targets[i];
if(target) {
let componentFactory = this._componentFactoryResolver.resolveComponentFactory(HelloComponent);
let cmpRef: any = target.createComponent(componentFactory);
}
}
}
, чтобы мы могли циклически перемещаться по нашему списку ссылок и создавать наш компонент на лету
рабочий стекблиц
Всего наилучшего.