API NgModule
Назначение @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.
Имущество | Описание |
---|---|
декларации | Список объявляемых классов (компонентов, директив и каналов), которые принадлежат этому модулю.
|
провайдеры | Список поставщиков внедрения зависимостей. 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 программирования