В настоящее время я загружаю модуль с компонентами динамически во время выполнения:
SystemJS.import(url).then((module) => {
const moduleFactory = this.compiler.compileModuleSync(module.default);
const moduleRef = moduleFactory.create(this.injector);
const widgets = moduleRef.injector.get('widgets');
const resolver = moduleRef.componentFactoryResolver;
const componentFactory = resolver.resolveComponentFactory(widgets[0][0].component);
const component = componentFactory.create(this.injector) as Component;
this.$stateRegistery.register({
name: 'modulea',
url: '/modulea',
component: widgets[0][0].component, // "component-a1"
});
});
Компонент выглядит правильно созданным и скомпилированным, однако, когда я получаю доступ к маршруту 'modulea' с моего ui-маршрутизатора Я получаю следующее сообщение об ошибке:
Error: No component factory found for ComponentA. Did you add it to @NgModule.entryComponents?
Это происходит из-за того, что ui-router ищет только компоненты, которые находятся в моем модуле приложения, а не в новом модуле с / ComponentA?
Нужно ли динамически добавлять модуль в мое приложение root?
Нужно ли сообщать или регистрировать мой динамически созданный модуль с помощью ui-router?
Для Вот ссылка на модуль виджета, который я извлекаю:
import { NgModule } from '@angular/core';
import { ComponentA1 } from './a1.component';
@NgModule({
declarations: [ComponentA1],
entryComponents: [ComponentA1],
providers: [{
provide: 'widgets',
useValue: [{
name: 'component-a1',
component: ComponentA1
}],
multi: true
}]
})
export default class ModuleA {
}
И его компонент:
import { Component } from '@angular/core';
@Component({
template: '<div>I am widget Component A</div>'
})
export class ComponentA1 {
}