Динамический URL-адрес шаблона с версией Angular 2 библиотеки Angular UI Bootstrap

Я создаю динамический URL-адрес шаблона, используя следующий код Как использовать переменную для определения templateUrl в Angular2, но мне нужно использовать средство выбора даты в шаблоне, и у меня возникли проблемы с добавлением библиотеки Angular UI Bootstrap (версия Angular 2). Ошибка

"Нет провайдера для NgbDateParserFormatter"

Я добавил NgbModule и FormsModule в раздел импорта

@NgModule({
    imports: [CommonModule, NgbModule.forRoot(), FormsModule ],
    declarations: [DynamicHtmlComponent]
})

class DynamicHtmlModule {}

Я создал версию планкера https://plnkr.co/edit/kWoSTi?p=preview Если поле даты в файле src/articles/first.html раскомментировано, приложение не работает.


person Jorge Herrero    schedule 17.10.2016    source источник


Ответы (2)


Я бы использовал следующий способ сделать это:

this.compiler.compileModuleAndAllComponentsAsync(DynamicHtmlModule)
  .then(factory => {
     const moduleRef = factory.ngModuleFactory.create(this.vcRef.parentInjector);

     const compFactory = factory.componentFactories
        .find(x => x.componentType === DynamicHtmlComponent);

     const cmpRef = this.vcRef.createComponent(compFactory, 0, moduleRef.injector);
});

Пример плункера

Одно замечание: вы можете использовать NgbDatepickerModule вместо NgbModule. Это повысит производительность Plunker.

person yurzui    schedule 17.10.2016

Вы можете импортировать NgbDatepickerModule следующим образом:

@NgModule({
imports: [
    ...
    NgbDatepickerModule.forRoot()
],

Это должно исправить «Нет провайдера для NgbDateParserFormatter».

person mtonev    schedule 27.10.2016