Комментарии 8
А через componentfactoryresolver не пробовали?
Ему же нужен определённый известный тип, даже если он динамический. Или это можно как-то обойти?
Если ты про дженерик то особо без разницы
Не совсем понимаю. Например, вот как оно должно приблизительно выглядеть:
// создаём factory
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(WebComponentType);
// создаём компонент внутри контейнера
const componentRef = this.componentContainerRef.createComponent<WebComponentType>(componentFactory);
// передаём данные в @Input компонента
componentRef.instance.someInput= this.componentInput;
Как всё это сделать, если WebComponentTypeне существует? Известен только селектор.
Просто создать класс?
export interface WebComponentType {
someInput: any;
}
В шаблоне
<ng-template #tempvar></ng-template>
В самом компоненте
@ViewChild('tempvar'{read:ViewContainerRef}) templateRef;
public componentRef:ComponentRef<any>;
AddComponent(component<any>) {
this.templateRef.clear();
const factory:ComponentFactory<any> = this.componentFactoryResolver.resolveComponentFactory<any>(component);
this.componentRef = this.templateRef.createComponent<any>(factory);
}
type any можно использовать. Единственное что компонент должен быть в модуле загружен) Либо делаешь обёртку компонент с прописанным api. И дальше на стадии инит переприсваиваешь своими, ну темплейт передаешь. Если рефлект метадату подключить и покапать декораторы то можно ещё и динамику подключения аутпутов и инпутов сделать
Так вся проблема в том, что компонент не загружен в модуле. К нему вообще нет никакого доступа из кода, только через API браузера. Это как создавать обычный div, только с инпутами и аутпутами.
По сути я и сделал обёртку.
Рефлект метадату посмотрю, может пригодится, но скорее всего DOM такое через себя не пропустит.
Я просто немного задачу наверное неправильно понял
Custom Elements из Angular в Angular