Я намагаюся зрозуміти 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'(що може відповідати anindex.ts ) призначені для імпорту TypeScript. Вони потрібні вам щоразу, коли ви використовуєте ідентифікатор у файлі машинопису, який оголошується в іншому файлі.
Angular's @NgModule() importsі TypeScript import- абсолютно різні поняття .
Див. Також синтаксис імпорту jDriven - TypeScript та ES6
Більшість з них насправді є простим синтаксисом модулів ECMAScript 2015 (ES6), який використовує TypeScript.
import- це функція JS (ES2015), а не TypeScript. :)
imports, але експортувати свої декларувані елементи (компонент, директива, труба) за допомогою exports. Отже, головні цілі importsта exportsрізні речі. Натомість головна мета exports- ваше declarations. Ви оголошуєте свій компонент за допомогою declarations, але для динамічного завантаженого компонента вам потрібно їх вставити entryComponents. Тим часом, providersкеровані в іншій історії DI DI.
imports використовуються для імпорту підтримуючих модулів, таких як FormsModule, RouterModule, CommonModule або будь-який інший на замовлення функціональний модуль.
declarationsвикористовуються для оголошення компонентів, директив, труб, що належать до поточного модуля. Усі всередині декларацій знають один одного. Наприклад, якщо у нас є компонент, скажімо UsernameComponent, який відображає список імен користувачів, а у нас також є труба, скажімо, toupperPipe, яка перетворює рядок у верхній регістр літер. Тепер, якщо ми хочемо показувати імена користувачів великими літерами в нашому UsernameComponent, тоді ми можемо використовувати toupperPipe, який ми створили раніше, але питання полягає в тому, як UsernameComponent знає, що toupperPipe існує і як він може отримати доступ та використовувати це. Ось приходять декларації, ми можемо оголосити UsernameComponent і toupperPipe.
Providers використовуються для введення послуг, необхідних компонентам, директивам, трубам в модулі.
Компоненти оголошуються, модулі імпортуються та надаються Послуги. Приклад, з яким я працюю:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import {FormsModule} from '@angular/forms';
import { UserComponent } from './components/user/user.component';
import { StateService } from './services/state.service';
@NgModule({
declarations: [
AppComponent,
UserComponent
],
imports: [
BrowserModule,
FormsModule
],
providers: [ StateService ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
@NgModuleконструкції:import { x } from 'y';: Це стандартний синтаксис машинопису (синтаксис ES2015/ES6модуля) для імпорту коду з інших файлів. Це не кутовий характер . Також це технічно не є частиною модуля, просто необхідно отримати необхідний код у межах цього файлу.imports: [FormsModule]: Ви імпортуєте сюди інші модулі. Наприклад, ми імпортуємо FormsModuleв наведеному нижче прикладі. Тепер ми можемо використовувати функціонал, який може запропонувати FormsModule протягом цього модуля.declarations: [OnlineHeaderComponent, ReCaptcha2Directive]: Ви розміщуєте тут свої компоненти, директиви та труби. Після оголошення тут ви тепер можете використовувати їх у всьому модулі. Наприклад, тепер ми можемо використовувати OnlineHeaderComponentв AppComponentпредставленні (html-файл). Кутовий знає, де це знайти, OnlineHeaderComponentтому що це оголошено в @NgModule.providers: [RegisterService]: Тут визначені наші послуги цього конкретного модуля. Ви можете користуватися послугами у своїх компонентах, вводячи ін'єкцію із залежністю.// Angular
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
// Components
import { AppComponent } from './app.component';
import { OfflineHeaderComponent } from './offline/offline-header/offline-header.component';
import { OnlineHeaderComponent } from './online/online-header/online-header.component';
// Services
import { RegisterService } from './services/register.service';
// Directives
import { ReCaptcha2Directive } from './directives/re-captcha2.directive';
@NgModule({
declarations: [
OfflineHeaderComponent,,
OnlineHeaderComponent,
ReCaptcha2Directive,
AppComponent
],
imports: [
BrowserModule,
FormsModule,
],
providers: [
RegisterService,
],
entryComponents: [
ChangePasswordComponent,
TestamentComponent,
FriendsListComponent,
TravelConfirmComponent
],
bootstrap: [AppComponent]
})
export class AppModule { }
Додавання швидкої шпаргалки, яка може допомогти після тривалої перерви з Angular:
Приклад:
declarations: [AppComponent]
Що ми можемо тут ввести? Компоненти, труби, директиви
Приклад:
imports: [BrowserModule, AppRoutingModule]
Що ми можемо тут ввести? інші модулі
Приклад:
providers: [UserService]
Що ми можемо тут ввести? послуги
Приклад:
bootstrap: [AppComponent]
Що ми можемо тут ввести? основний компонент, який буде генерований цим модулем (верхній батьківський вузол для компонентного дерева)
Приклад:
entryComponents: [PopupComponent]
Що ми можемо тут ввести? динамічно генеровані компоненти (наприклад, за допомогою ViewContainerRef.createComponent ())
Приклад:
export: [TextDirective, PopupComponent, BrowserModule]
Що ми можемо тут ввести? компоненти, директиви, модулі або труби, до яких ми хотіли б мати доступ до них в іншому модулі (після імпорту цього модуля)
forRoot()в ледачому завантаженому модулі. Ви згодні? Див . Основний модуль . Посилання на # shared-module-for-root більше не існує.