Я пытаюсь создать динамический c компонент, который создается моей собственной фабрикой.
Ниже приведена моя фабрика для создания динамического c компонента.
export class MKComponentFactory {
constructor(private service: Service) {}
getComponent (type: string): AComponent {
if(type === "A") {
return new AComponent(service: Service);
} else {
return null;
}
}
}
В компоненте для создания динамического c компонента у меня есть следующий код, который обучается https://angular.io/guide/dynamic-component-loader.
loadComponent() {
// this does not work
const component = <any>this.mkComponentFactory.getComponent('A');
console.log(component instanceof AComponent);
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(component);
const viewContainerRef = this.fieldHost.viewContainerRef;
viewContainerRef.clear();
const componentRef = viewContainerRef.createComponent(componentFactory);
(<HostComponent>componentRef.instance).data = this.data;
}
}
It возвращает "Фабрика компонентов не найдена. Вы добавили ее в @ NgModule.entryComponents?" Я фактически добавил AComponent в entryComponents и объявления определенно. У меня есть только один модуль, поэтому нет конфликта модулей. Компонент, который я получаю из mkComponentFactory.getComponent, определенно является AComponent, поэтому я попытался привести его к AComponent, но он не увенчался успехом, поэтому я включил его в любой (после исследования). но если я делаю так, он возвращает эту ошибку. Можете ли вы дать несколько советов по этому вопросу?
На самом деле, в конечном итоге я хочу создать абстрактный класс для AComponent, BComponent, CComponent и вернуть этот абстрактный класс с фабрики, хотя я не смог туда добраться. Можете ли вы дать некоторую информацию, как этого добиться?