кодесурса
«Угловое

API NgModule

script1adsense2code
script1adsense3code

Назначение @NgModule

На высоком уровне NgModules - это способ организации приложений Angular, и они достигают этого с помощью метаданных в декораторе @NgModule. Метаданные делятся на три категории:

  • Статический: конфигурация компилятора, которая сообщает компилятору о селекторах директив и о том, где в шаблонах директивы должны применяться посредством сопоставления селекторов. Это настраивается через массив объявлений.
  • Время выполнения: настройка инжектора через массив провайдера.
  • Композиционность / группировка: объединение NgModules и предоставление их через массивы импорта и экспорта.
@NgModule({
  // Static, that is compiler configuration
  declarations: [], // Configure the selectors
  entryComponents: [], // Generate the host factory
  // Runtime, or injector configuration
  providers: [], // Runtime injector configuration
  // Composability / Grouping
  imports: [], // composing NgModules together
  exports: [] // making NgModules available to other parts of the app
})

@NgModule метаданные

В следующей таблице приведены свойства метаданных @NgModule.

Имущество Описание
декларации Список объявляемых классов (компонентов, директив и каналов), которые принадлежат этому модулю.
  1. При компиляции шаблона вам нужно определить набор селекторов, которые должны использоваться для запуска их соответствующих директив.
  2. Шаблон компилируется в контексте модуля NgModule - модуля NgModule, в котором объявлен компонент шаблона, - который определяет набор селекторов с использованием следующих правил:
    • Все селекторы директив перечислены в «объявлениях».
    • Все селекторы директив экспортированы из импортированных NgModules. Компоненты, директивы и трубы должны принадлежать ровно одному модулю. Компилятор выдает ошибку, если вы пытаетесь объявить один и тот же класс более чем в одном модуле. Будьте осторожны, чтобы не объявлять класс, импортированный прямо или косвенно из другого модуля.
провайдеры

Список поставщиков внедрения зависимостей.

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

Эти сервисы становятся доступными для внедрения в любой компонент, директиву, канал или сервис, являющийся дочерним элементом этого инжектора.

Модуль с отложенной загрузкой имеет свой собственный инжектор, который обычно является потомком корневого инжектора приложения.

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

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

импорт

Список модулей, которые следует сложить в этот модуль. Свернутый означает, что все импортированные свойства NgModule были объявлены здесь.

В частности, это выглядит так, как если бы в этом модуле был объявлен список модулей, на экспортные компоненты, директивы или каналы которых ссылаются шаблоны компонентов.

Шаблон компонента может ссылаться на другой компонент, директиву или канал, когда ссылка объявлена в этом модуле или если импортированный модуль экспортировал ее. Например, компонент может использовать директивы NgIf и NgFor, только если модуль импортировал Angular CommonModule (возможно, косвенно, путем импорта BrowserModule).

Вы можете импортировать много стандартных директив из CommonModule, но некоторые знакомые директивы принадлежат другим модулям. Например, вы можете использовать [(ngModel)] только после импорта Angular FormsModule.

экспорт

Список объявлений - классов компонентов, директив и каналов - которые может использовать импортирующий модуль.

Экспортируемые объявления являются публичным API модуля. Компонент в другом модуле может использовать UserComponent этого модуля, если он импортирует этот модуль и этот модуль экспортирует UserComponent.

По умолчанию объявления являются закрытыми. Если этот модуль не экспортирует UserComponent, то только компоненты в этом модуле могут использовать UserComponent.

Импорт модуля автоматически не реэкспортирует импортированные импортированные модули. Модуль 'B' не может использовать ngIf только потому, что он импортировал модуль 'A', который импортировал CommonModule. Модуль 'B' должен импортировать сам CommonModule.

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

Реэкспорт делает модуль транзитивности явным. Если модуль 'A' реэкспортирует CommonModule и модуль B 'импортирует модуль' A ', компоненты модуля B могут использовать ngIf, даже если сам B не импортировал CommonModule.

начальная загрузка

Список компонентов, которые автоматически загружаются.

Обычно в этом списке есть только один компонент - корневой компонент приложения.

Angular может запускаться с несколькими компонентами начальной загрузки, каждый из которых имеет свое местоположение на веб-странице хоста.

Компонент начальной загрузки автоматически добавляется в entryComponents.

entryComponents

Список компонентов, которые могут быть динамически загружены в представление.

По умолчанию в приложении Angular всегда есть хотя бы один компонент ввода, корневой компонент AppComponent. Его цель - служить точкой входа в приложение, то есть вы загружаете его для запуска приложения.

Маршрутизируемые компоненты также являются компонентами ввода, поскольку их необходимо загружать динамически. Маршрутизатор создает их и сбрасывает в DOM рядом с <router-outlet>.

Хотя загруженные и маршрутизируемые компоненты являются компонентами ввода, вам не нужно добавлять их в список entryComponents модуля, поскольку они добавляются неявно.

Angular автоматически добавляет компоненты в начальную загрузку модуля и определения маршрутов в список entryComponents.

Это оставляет только компоненты, загруженные с использованием одного из императивных методов, таких как ViewComponentRef.createComponent (), как неоткрываемые.

Динамическая загрузка компонентов не распространена в большинстве приложений за пределами маршрутизатора. Если вам нужно динамически загружать компоненты, вы должны добавить эти компоненты в список entryComponents самостоятельно.

Предыдущий: Модуль отложенной загрузки
Далее: Совместное использование модулей

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code