Почему импорт общего модуля не падает? - PullRequest
3 голосов
/ 23 сентября 2019

У меня есть небольшое угловое приложение, которое использует шаблон CoreModule и SharedModule.Поскольку мое приложение в настоящее время довольно маленькое, я импортировал SharedModule в корневой модуль AppModule.У меня также есть лениво загруженный административный модуль с именем AdminModule, но, похоже, у него нет доступа к общему модулю, даже если он был импортирован в корневой модуль.Я должен явно импортировать SharedModule снова, чтобы использовать его внутри компонентов модуля администратора.Почему это?Если мне придется повторно импортировать их снова внутри каждого лениво загруженного модуля, какой смысл импортировать их в корневой модуль?

AppModule

...
imports: [
    BrowserModule,
    BrowserAnimationsModule,
    MatExpansionModule,
    AppRoutingModule,
    AngularFireModule.initializeApp(environment.firebase),
    AngularFirestoreModule, // imports firebase/firestore, only needed for database features
    AngularFireAuthModule, // imports firebase/auth, only needed for auth features,
    AngularFireStorageModule, // imports firebase/storage only needed for storage features
    SharedModule, // To be imported on each feature module, instead of AppModule. For now, this is fine though
    CoreModule,
    HttpClientModule
  ],
...

Модуль маршрутизации приложения (Lazy загружен)

const routes: Routes = [
  {
    path: 'admin',
    loadChildren: './admin/admin.module#AdminModule',
    canActivate: [AdminAuthGuard]
  }]

AdminModule

...
imports: [CommonModule, AdminRoutingModule, SharedModule, CoreModule],

Например, если у меня есть компонент нижнего колонтитула внутри SharedModuleи попробуйте использовать его в моем AdminHomeComponent, который является частью AdminModule, я получаю сообщение об ошибке (без импорта SharedModule).Все отлично работает, когда я импортирую его.

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Импорт модуля позволяет компонентам модуля, который импортирует внешний модуль, видеть компоненты из этого импортированного модуля.Но только те в этом модуле, а не во вложенных.

Импорт модуля в корневом модуле полезен для ПРОВАЙДЕРОВ, это сильно отличается от компонентов.

Если вы импортируете модуль, которыйпредоставляет услугу в модуле, все компоненты этого модуля и вложенных модулей смогут видеть поставщиков.(по этой причине рекомендуется помещать поставщиков модуля только в статический метод forRoot (), если в модуле есть поставщики и компоненты, которые будут использоваться повторно).

0 голосов
/ 23 сентября 2019

Я также нашел этот отличный ответ в другом посте https://stackoverflow.com/a/43153529/8948458

В ту минуту, когда вы создаете новый модуль, ленивый или нет, любой новый модуль и вы что-то в него объявляете, этот новый модульчистое состояние.Он ничего не знает,

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