Почему иногда мы используем NgModule, а иногда чистые компоненты Angular 2

#angular #typescript

#angular #машинописный текст #typescript

Вопрос:

У меня есть один вопрос об Angular 2. Я работал с ним до RC4. Теперь я увидел, что добавлены основные понятия (NgModule). Я пытаюсь работать с этим, но я не понимаю, почему мы иногда используем модуль, а иногда только компонент.

Например. Почему мы используем компоненты вместо модуля? Почему мы не создали оболочку NgModule для Crisis Center и не перешли к ней? Я не понимаю.

Из официального документа я понимаю, что каждый логический модуль должен быть другим модулем, который можно создать с помощью NgModule. Хорошо, нет проблем.

Но после этого я вижу, что мы просто используем чистые компоненты. Я не понимаю, когда я должен использовать концепцию модуля, а когда компонент. Я не могу использовать module для маршрутизации?

Но если у меня есть много сервисов / дочерних компонентов / каналов и т. Д. В каком-то компоненте, который я хочу отобразить по некоторому пути, так что в этом случае я должен создавать стандартные декораторы поставщиков / директив, как в старом добром RC4?

Спасибо.

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

import { CrisisService }        from './crisis.service';
import { CrisisDetailResolve }  from './crisis-detail-resolve.service';

import { CrisisCenterComponent }     from './crisis-center.component';
import { CrisisListComponent }       from './crisis-list.component';
import { CrisisCenterHomeComponent } from './crisis-center-home.component';
import { CrisisDetailComponent }     from './crisis-detail.component';

import { crisisCenterRouting } from './crisis-center.routing';

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    crisisCenterRouting
  ],
  declarations: [
    CrisisCenterComponent,
    CrisisListComponent,
    CrisisCenterHomeComponent,
    CrisisDetailComponent
  ],

  providers: [
    CrisisService,
    CrisisDetailResolve
  ]
})
export class CrisisCenterModule {}
  

Ответ №1:

NgModule был введен для поддержки отложенной загрузки в сочетании с маршрутизатором. Поэтому, если вы хотите отложить загрузку части вашего приложения только тогда, когда на самом деле выполняется навигация по соответствующему маршруту, тогда эта часть вашего приложения должна перейти в свою собственную NgModule .

Кроме того, это NgModule можно использовать для группировки компонентов, директив, каналов и служб в соответствии с вашими предпочтениями. Общим является создание NgModule компонентов, директив, каналов и служб, которые объединяют «функцию», которую вы, возможно, захотите повторно использовать в разных местах.

Вы также можете поместить все, что не загружено лениво, в один NgModule , если хотите, но это не рекомендуется.

Комментарии:

1. Спасибо, Гюнтер. Я не видел этой информации в документации. Или я что-то пропустил?

2. Вы проверяли angular.io/docs/ts/latest/cookbook/ngmodule-faq.html и angular.io/docs/ts/latest/guide/ngmodule.html ? (какое-то время я проверял это сам, поэтому не уверен, что именно в нем содержится).

3. да, я прочитал руководство о NgModule, но не FAQ. Спасибо, я проверю это.

4. Итак, в FAQ я увидел, что я не могу объявлять сторонние модули. Так должен ли я использовать старые директивы в чистом компоненте, когда я хочу использовать какое-то стороннее всплывающее окно (например)? например, * @Component({…, директивы: [customPopupDirective]})*

5. Большое спасибо, Гюнтер.