Мне очень нравится ответ, предоставленный для динамического шаблона, основанного на значении, а не на переменной с ngTemplateOutlet. Однако я не могу заставить его работать. Упрощенный пример:
export class A {
}
export class MyComponent
implements OnInit {
public controls$ = Observable<any[]>([]);
ngOnInit() {
this.controls$.next([new A()]);
}
public getTypeName(control: any) {
if (control instanceof A) {
return "AControl";
}
return "";
}
}
Шаблон:
<div *ngFor="let control of control$ | async">
{{ getControlType(control) }}
</div>
Урожайность:
AControl
Все идет нормально. При добавлении шаблона получаю исключение:
<div *ngFor="let control of control$ | async">
{{ getControlType(control) }}
<ng-container
[ngTemplateOutlet]="getControlType(control)"
[ngTemplateOutletContext]="{ control: control }">
</ng-container>
</div>
<ng-template
#AControl
let-item="control">A Control</ng-template>
бросает:
templateRef.createEmbeddedView не является функцией
Я не уверен, что мне нужно изменить, чтобы шаблон #AControl
отображался в контейнере.