Динамически добавлять маршрут к ui-router для модуля / компонента, загруженного во время выполнения - PullRequest
1 голос
/ 09 января 2020

В настоящее время я загружаю модуль с компонентами динамически во время выполнения:

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 {

}
...