Saya mencoba memahami Angular (kadang-kadang disebut Angular2 +), kemudian saya menemukan @Module
:
Impor
Deklarasi
Penyedia
Mengikuti Mulai Cepat Sudut
Saya mencoba memahami Angular (kadang-kadang disebut Angular2 +), kemudian saya menemukan @Module
:
Impor
Deklarasi
Penyedia
Mengikuti Mulai Cepat Sudut
Jawaban:
Konsep Sudut
imports
membuat deklarasi yang diekspor dari modul lain tersedia di modul saat inideclarations
adalah untuk membuat arahan (termasuk komponen dan pipa) dari modul saat ini tersedia untuk arahan lain dalam modul saat ini. Penyeleksi arahan, komponen atau pipa hanya cocok dengan HTML jika dinyatakan atau diimpor.providers
adalah untuk membuat layanan dan nilai diketahui oleh DI (injeksi ketergantungan). Mereka ditambahkan ke lingkup root dan mereka disuntikkan ke layanan atau arahan lain yang menjadikannya sebagai ketergantungan.Kasus khusus untuk providers
modul yang dimuat malas yang mendapatkan injektor anak mereka sendiri.providers
dari modul lazy loaded hanya disediakan untuk modul lazy loaded ini (tidak seluruh aplikasi seperti halnya dengan modul lain).
Untuk detail lebih lanjut tentang modul, lihat juga https://angular.io/docs/ts/latest/guide/ngmodule.html
exports
membuat komponen, arahan, dan pipa tersedia dalam modul yang menambahkan modul ini imports
. exports
juga dapat digunakan untuk mengekspor kembali modul seperti CommonModule dan FormsModule, yang sering dilakukan dalam modul bersama.
entryComponents
mendaftarkan komponen untuk kompilasi offline sehingga dapat digunakan bersama ViewContainerRef.createComponent()
. Komponen yang digunakan dalam konfigurasi router ditambahkan secara implisit.
Impor TypeScript (ES2015)
import ... from 'foo/bar'
(yang mungkin berubah menjadiindex.ts
berubah ) adalah untuk impor TypeScript. Anda memerlukan ini setiap kali Anda menggunakan pengidentifikasi dalam file naskah yang dinyatakan dalam file naskah lain.
Angular @NgModule()
imports
dan TypeScript import
adalah konsep sama sekali berbeda .
Lihat juga jDriven - sintaks impor TypeScript dan ES6
Sebagian besar dari mereka sebenarnya sintaks modul ECMAScript 2015 (ES6) polos yang menggunakan TypeScript juga.
import
adalah fungsionalitas JS (ES2015), bukan salah satu TypeScript. :)
imports
, tetapi ekspor deklarabel Anda (komponen, direktif, pipa) dengan exports
. Jadi, target utamaimports
dan exports
hal yang berbeda. Sebaliknya, target utama exports
Anda declarations
. Anda mendeklarasikan komponen Anda dengan declarations
, tetapi untuk komponen yang dimuat dinamis, Anda perlu memasukkannya entryComponents
. Sementara itu, providers
dikelola dalam cerita lain oleh DI.
imports
digunakan untuk mengimpor modul pendukung seperti FormsModule, RouterModule, CommonModule, atau modul fitur custom-made lainnya.
declarations
digunakan untuk mendeklarasikan komponen, arahan, pipa yang termasuk dalam modul saat ini. Semua orang di dalam deklarasi saling kenal. Misalnya, jika kita memiliki komponen, katakanlah UsernameComponent, yang menampilkan daftar nama pengguna dan kami juga memiliki pipa, katakan toupperPipe, yang mengubah string menjadi string huruf besar. Sekarang Jika kita ingin menampilkan nama pengguna dalam huruf besar di UsernameComponent kita maka kita dapat menggunakan toupperPipe yang telah kita buat sebelumnya tetapi pertanyaannya adalah bagaimana UsernameComponent tahu bahwa toupperPipe ada dan bagaimana ia dapat mengakses dan menggunakannya. Di sini deklarasi datang, kita dapat mendeklarasikan UsernameComponent dan toupperPipe.
Providers
digunakan untuk menyuntikkan layanan yang dibutuhkan oleh komponen, arahan, pipa dalam modul.
Komponen dideklarasikan, Modul diimpor, dan Layanan disediakan. Contoh yang saya kerjakan:
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
Konstruksi sudut :import { x } from 'y';
: Ini adalah sintaks naskah skrip standar ( ES2015/ES6
sintaks modul) untuk mengimpor kode dari file lain. Ini bukan spesifik Sudut . Juga ini secara teknis bukan bagian dari modul, hanya perlu untuk mendapatkan kode yang diperlukan dalam lingkup file ini.imports: [FormsModule]
: Anda mengimpor modul lain di sini. Misalnya kita mengimpor FormsModule
dalam contoh di bawah ini. Sekarang kita bisa menggunakan fungsionalitas yang ditawarkan FormsModule di seluruh modul ini.declarations: [OnlineHeaderComponent, ReCaptcha2Directive]
: Anda meletakkan komponen, arahan, dan pipa Anda di sini. Setelah dideklarasikan di sini, Anda sekarang dapat menggunakannya di seluruh modul. Misalnya kita sekarang dapat menggunakan OnlineHeaderComponent
dalam AppComponent
pandangan (file html). Angular tahu di mana menemukan ini OnlineHeaderComponent
karena dinyatakan dalam @NgModule
.providers: [RegisterService]
: Di sini layanan kami dari modul khusus ini ditentukan. Anda dapat menggunakan layanan di komponen Anda dengan menyuntikkan dengan dependensi injeksi.// 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 { }
Menambahkan lembar contekan cepat yang dapat membantu setelah istirahat lama dengan Angular:
Contoh:
declarations: [AppComponent]
Apa yang bisa kita suntikkan di sini? Komponen, pipa, arahan
Contoh:
imports: [BrowserModule, AppRoutingModule]
Apa yang bisa kita suntikkan di sini? modul lainnya
Contoh:
providers: [UserService]
Apa yang bisa kita suntikkan di sini? jasa
Contoh:
bootstrap: [AppComponent]
Apa yang bisa kita suntikkan di sini? komponen utama yang akan dihasilkan oleh modul ini (simpul orangtua atas untuk pohon komponen)
Contoh:
entryComponents: [PopupComponent]
Apa yang bisa kita suntikkan di sini? komponen yang dihasilkan secara dinamis (misalnya dengan menggunakan ViewContainerRef.createComponent ())
Contoh:
export: [TextDirective, PopupComponent, BrowserModule]
Apa yang bisa kita suntikkan di sini? komponen, arahan, modul atau pipa yang kami ingin memiliki akses ke mereka di modul lain (setelah mengimpor modul ini)
forRoot()
dalam modul malas. Apa kamu setuju? Lihat Modul Inti . Tautan ke # shared-module-for-root tidak ada lagi.