Я пытаюсь понять Angular (иногда называемый Angular2 +), затем я наткнулся @Module
:
импорт
Объявления
Провайдеры
После углового быстрого старта
источник
Я пытаюсь понять Angular (иногда называемый Angular2 +), затем я наткнулся @Module
:
импорт
Объявления
Провайдеры
После углового быстрого старта
Угловые понятия
imports
делает экспортированные объявления других модулей доступными в текущем модулеdeclarations
должны сделать директивы (включая компоненты и трубы) из текущего модуля доступными для других директив в текущем модуле. Селекторы директив, компонентов или каналов сопоставляются только с HTML, если они объявлены или импортированы.providers
должны сделать сервисы и значения известными DI (внедрение зависимости). Они добавляются в корневую область и внедряются в другие службы или директивы, которые имеют их в качестве зависимости.Особый случай providers
- лениво загруженные модули, которые получают собственный дочерний инжектор. providers
модуля с отложенной загрузкой по умолчанию предоставляются только этому загруженному модулю (но не всему приложению, как с другими модулями).
Для получения дополнительной информации о модулях см. Также https://angular.io/docs/ts/latest/guide/ngmodule.html.
exports
делает компоненты, директивы и каналы доступными в модулях, к которым добавляется этот модуль imports
. exports
может также использоваться для реэкспорта модулей, таких как CommonModule и FormsModule, что часто делается в общих модулях.
entryComponents
регистрирует компоненты для автономной компиляции, чтобы их можно было использовать с ViewContainerRef.createComponent()
. Компоненты, используемые в конфигурациях маршрутизатора, добавляются неявно.
Импорт TypeScript (ES2015)
import ... from 'foo/bar'
(который может разрешить вindex.ts
) для импорта TypeScript. Они нужны вам всякий раз, когда вы используете идентификатор в файле машинописного текста, который объявлен в другом файле машинописного текста.
Angular @NgModule()
imports
и TypeScript import
- это совершенно разные понятия .
См. Также jDriven - синтаксис импорта TypeScript и ES6
Большинство из них на самом деле представляют собой простой синтаксис модуля ECMAScript 2015 (ES6), который также используется в TypeScript.
forRoot()
в модуль с ленивой загрузкой. Ты согласен? Смотрите основной модуль . Ссылка на # shared-module-for-root больше не существует.import
Следует упомянуть, что afaik - это функциональность JS (ES2015), а не TypeScript. :)imports
, но экспортировать ваши деклараторы (компонент, директива, труба) сexports
. Итак, основными целямиimports
иexports
являются разные вещи. Вместо этого главная цельexports
- вашаdeclarations
. Вы объявляете свой компонент с помощьюdeclarations
, но для динамически загружаемого компонента вам необходимо вставить ихentryComponents
. Тем временемproviders
DI управляет другой историей.imports
используются для импорта вспомогательных модулей, таких как FormsModule, RouterModule, CommonModule или любого другого пользовательского функционального модуля.declarations
используются для объявления компонентов, директив, каналов, которые принадлежат текущему модулю. Все внутри деклараций знают друг друга. Например, если у нас есть компонент, скажем UsernameComponent, который отображает список имен пользователей, и у нас также есть канал, скажем toupperPipe, который преобразует строку в строку заглавных букв. Теперь, если мы хотим отображать имена пользователей заглавными буквами в нашем компоненте UsernameComponent, тогда мы можем использовать созданную ранее toupperPipe, но вопрос в том, как UsernameComponent знает, что существует toupperPipe, и как он может получить к нему доступ и использовать его. Здесь идут объявления, мы можем объявить UsernameComponent и toupperPipe.Providers
используются для введения услуг, требуемых компонентами, директивами, трубами в модуле.источник
Компоненты объявлены, Модули импортированы, и Услуги предоставляются. Пример, с которым я работаю:
источник
Угловые
@NgModule
конструкции:import { x } from 'y';
: Это стандартный синтаксис машинного текста (ES2015/ES6
модульный синтаксис) для импорта кода из других файлов. Это не специфично для Angular . Кроме того, это технически не является частью модуля, просто необходимо получить необходимый код в рамках этого файла.imports: [FormsModule]
: Вы импортируете другие модули здесь. Например, мы импортируемFormsModule
в примере ниже. Теперь мы можем использовать функциональные возможности, которые FormsModule предлагает в этом модуле.declarations: [OnlineHeaderComponent, ReCaptcha2Directive]
: Вы помещаете свои компоненты, директивы и трубы здесь. После объявления здесь вы можете использовать их во всем модуле. Например, теперь мы можем использоватьOnlineHeaderComponent
вAppComponent
представлении (HTML-файл). Angular знает, где это найти,OnlineHeaderComponent
потому что он объявлен в@NgModule
.providers: [RegisterService]
: Здесь определяются наши сервисы этого конкретного модуля. Вы можете использовать службы в своих компонентах, внедрив их с помощью внедрения зависимостей.Пример модуля:
источник
Добавление быстрого шпаргалки, которая может помочь после долгого перерыва с Angular:
ЗАЯВЛЕНИЯ
Пример:
declarations: [AppComponent]
Что мы можем здесь ввести? Компоненты, трубы, директивы
ИМПОРТ
Пример:
imports: [BrowserModule, AppRoutingModule]
Что мы можем здесь ввести? другие модули
ПОСТАВЩИКИ
Пример:
providers: [UserService]
Что мы можем здесь ввести? Сервисы
начальная загрузка
Пример:
bootstrap: [AppComponent]
Что мы можем здесь ввести? основной компонент, который будет сгенерирован этим модулем (верхний родительский узел для дерева компонентов)
ВХОДНЫЕ КОМПОНЕНТЫ
Пример:
entryComponents: [PopupComponent]
Что мы можем здесь ввести? динамически генерируемые компоненты (например, с помощью ViewContainerRef.createComponent ())
ЭКСПОРТ
Пример:
export: [TextDirective, PopupComponent, BrowserModule]
Что мы можем здесь ввести? компоненты, директивы, модули или каналы, к которым мы хотели бы иметь доступ в другом модуле (после импорта этого модуля)
источник
источник