Фабрика компонентов не найдена. Вы добавили его в @ NgModule.entryComponents? при создании компонента Dynami c - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь создать динамический 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 и вернуть этот абстрактный класс с фабрики, хотя я не смог туда добраться. Можете ли вы дать некоторую информацию, как этого добиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...