Модуль корневого уровня Angular 2 Bootstrap

Angular 2 ng-bootstrap указывает, что корневой модуль необходимо зарегистрировать в imports свойство корня NgModule:

@NgModule({
  declarations: [AppComponent, ...],
  imports: [NgbModule.forRoot(), ...],
  bootstrap: [AppComponent]
})
export class AppModule {}

При следовании руководству по стилю Angular 2 имеет ли смысл зарегистрировать NgbModule в модуле shared или core? Если да, то как можно выполнить forRoot() для этого стороннего модуля, чтобы меня можно было использовать как часть SharedModule, импортируемого в другие функциональные модули? Можно ли его зарегистрировать в качестве провайдера в CoreModule, но будет ли синглтон разумным или даже возможным выбором для сторонней библиотеки, такой как ng-bootstrap?

@NgModule({
  imports: [CommonModule, FormsModule, NgbModule],
  declarations: [
    FooComponent
  ],
  providers: [FooService],
  exports: [
    CommonModule,
    FormsModule,
    FooComponent,
    NgbModule
  ]
})
export class SharedModule {}

Вопрос в том, куда девать сторонние модули, если они будут повторно использоваться в выбранных функциональных компонентах приложения с целью сохранения «чистоты» базового модуля приложения за счет использования CoreModule и SharedModule, как показано в стиле гид.

Спасибо!


person Alexander Staroselsky    schedule 21.02.2017    source источник


Ответы (1)


Основываясь на документации Angular2, я бы склонялся к размещению таких вещей, как ng-bootstrap, в SharedModule:

ОБЩИЙ МОДУЛЬ

Он может повторно экспортировать другие модули виджетов, такие как CommonModule, FormsModule и модули с элементами управления пользовательского интерфейса, которые вы используете чаще всего.

Источник: https://angular.io/docs/ts/latest/cookbook/ngmodule-faq.html#!#q-module-recommendations

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

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';

// Third Party Modules
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    NgbModule.forRoot() // Required for bootstrap module
  ],
  declarations: [],
  exports: [
    CommonModule,
    FormsModule,
    NgbModule
  ]
})
export class SharedModule {}

Модули функций, которые импортируют SharedModule, теперь могут использовать функции ngb в своих компонентах.

person Dennis W    schedule 01.03.2017
comment
Кажется, команда NG не рекомендует вызывать forRoot(). Из документов: Only call and import a .forRoot result in the root application module, AppModule. Importing it in any other module, particularly in a lazy-loaded module, is contrary to the intent and will likely produce a runtime error. Источник [angular.io/docs/ts/latest /cookbook/ngmodule-faq.html] - person ŁukaszBachman; 22.05.2017