Sto cercando di capire Angular (a volte chiamato Angular2 +), poi mi sono imbattuto @Module
:
importazioni
dichiarazioni
provider
A seguito di Angular Quick Start
Sto cercando di capire Angular (a volte chiamato Angular2 +), poi mi sono imbattuto @Module
:
importazioni
dichiarazioni
provider
A seguito di Angular Quick Start
Risposte:
Concetti angolari
imports
rende disponibili le dichiarazioni esportate di altri moduli nel modulo correntedeclarations
devono rendere disponibili le direttive (compresi i componenti e i tubi) dal modulo corrente ad altre direttive nel modulo corrente. I selettori di direttive, componenti o pipe vengono confrontati con l'HTML solo se vengono dichiarati o importati.providers
devono rendere noti servizi e valori a DI (Iniezione delle dipendenze). Vengono aggiunti all'ambito radice e vengono iniettati in altri servizi o direttive che li hanno come dipendenza.Un caso speciale providers
sono i moduli caricati in modo pigro che ottengono il proprio iniettore di bambini. providers
di un modulo caricato pigro sono forniti solo a questo modulo caricato pigro di default (non l'intera applicazione come è con altri moduli).
Per maggiori dettagli sui moduli consultare anche https://angular.io/docs/ts/latest/guide/ngmodule.html
exports
rende i componenti, le direttive e i tubi disponibili nei moduli che aggiungono questo modulo imports
. exports
può anche essere utilizzato per riesportare moduli come CommonModule e FormsModule, che viene spesso eseguito in moduli condivisi.
entryComponents
registra i componenti per la compilazione offline in modo che possano essere utilizzati con ViewContainerRef.createComponent()
. I componenti utilizzati nelle configurazioni del router vengono aggiunti implicitamente.
Importazioni TypeScript (ES2015)
import ... from 'foo/bar'
(che può essere risolto in unindex.ts
) sono per le importazioni TypeScript. Ne hai bisogno ogni volta che usi un identificatore in un file dattiloscritto dichiarato in un altro file dattiloscritto.
Angular @NgModule()
imports
e TypeScript import
sono concetti completamente diversi .
Vedi anche jDriven - Sintassi di importazione TypeScript ed ES6
La maggior parte di essi è in realtà una semplice sintassi del modulo ECMAScript 2015 (ES6) utilizzata anche da TypeScript.
import
è una funzionalità JS (ES2015), non una TypeScript. :)
imports
, ma esportare i dichiarabili (componente, direttiva, pipe) con exports
. Quindi, i principali obiettivi di imports
ed exports
è cose diverse. Invece, l'obiettivo principale di exports
è il tuo declarations
. Dichiarate il componente per declarations
, ma per il componente caricato dinamico, è necessario inserirlo entryComponents
. Nel frattempo, ilproviders
sono gestiti in un'altra storia da DI.
imports
vengono utilizzati per importare moduli di supporto come FormsModule, RouterModule, CommonModule o qualsiasi altro modulo di funzionalità personalizzato.
declarations
vengono utilizzati per dichiarare componenti, direttive, tubi che appartengono al modulo corrente. Tutti all'interno delle dichiarazioni si conoscono. Ad esempio, se abbiamo un componente, ad esempio UsernameComponent, che visualizza un elenco dei nomi utente e abbiamo anche una pipe, ad esempio toupperPipe, che trasforma una stringa in una stringa di lettere maiuscole. Ora Se vogliamo mostrare i nomi utente in lettere maiuscole nel nostro UsernameComponent, allora possiamo usare il toupperPipe che avevamo creato prima, ma la domanda è come UsernameComponent sa che esiste il toupperPipe e come può accedervi e usarlo. Ecco le dichiarazioni, possiamo dichiarare UsernameComponent e toupperPipe.
Providers
sono utilizzati per iniettare i servizi richiesti da componenti, direttive, tubi nel modulo.
I componenti vengono dichiarati, i moduli vengono importati e vengono forniti i servizi. Un esempio con cui sto lavorando:
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
Costrutti angolari :import { x } from 'y';
: Si tratta della sintassi dattiloscritta standard (sintassi del ES2015/ES6
modulo) per l'importazione di codice da altri file. Questo non è specifico angolare . Anche questo tecnicamente non fa parte del modulo, è solo necessario ottenere il codice necessario nell'ambito di questo file.imports: [FormsModule]
: Importi altri moduli qui. Ad esempio importiamo FormsModule
nell'esempio seguente. Ora possiamo usare la funzionalità che FormsModule ha da offrire in questo modulo.declarations: [OnlineHeaderComponent, ReCaptcha2Directive]
: Metti qui i tuoi componenti, direttive e tubi. Una volta dichiarato qui ora puoi usarli in tutto il modulo. Ad esempio, ora possiamo usare OnlineHeaderComponent
nella AppComponent
vista (file html). Angular sa dove trovarlo OnlineHeaderComponent
perché è dichiarato nel file @NgModule
.providers: [RegisterService]
: Qui vengono definiti i nostri servizi di questo modulo specifico. È possibile utilizzare i servizi nei componenti iniettando l'iniezione di dipendenza.// 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 { }
Aggiunta di un cheat sheet rapido che può essere utile dopo la lunga pausa con Angular:
Esempio:
declarations: [AppComponent]
Cosa possiamo iniettare qui? Componenti, tubi, direttive
Esempio:
imports: [BrowserModule, AppRoutingModule]
Cosa possiamo iniettare qui? altri moduli
Esempio:
providers: [UserService]
Cosa possiamo iniettare qui? Servizi
Esempio:
bootstrap: [AppComponent]
Cosa possiamo iniettare qui? il componente principale che verrà generato da questo modulo (nodo principale superiore per un albero dei componenti)
Esempio:
entryComponents: [PopupComponent]
Cosa possiamo iniettare qui? componenti generati dinamicamente (ad esempio utilizzando ViewContainerRef.createComponent ())
Esempio:
export: [TextDirective, PopupComponent, BrowserModule]
Cosa possiamo iniettare qui? componenti, direttive, moduli o pipe a cui vorremmo avere accesso in un altro modulo (dopo aver importato questo modulo)
forRoot()
in un modulo caricato in modo pigro. Sei d'accordo? Vedi il modulo principale . Il collegamento a # shared-module-for-root non esiste più.