J'essaie de comprendre Angular (parfois appelé Angular2 +), puis je suis tombé sur @Module
:
Importations
Déclarations
Fournisseurs
Suite au démarrage rapide angulaire
J'essaie de comprendre Angular (parfois appelé Angular2 +), puis je suis tombé sur @Module
:
Importations
Déclarations
Fournisseurs
Suite au démarrage rapide angulaire
Réponses:
Concepts angulaires
imports
rend les déclarations exportées des autres modules disponibles dans le module actueldeclarations
sont de rendre les directives (y compris les composants et les tuyaux) du module actuel disponibles aux autres directives du module actuel. Les sélecteurs de directives, de composants ou de canaux ne sont comparés au HTML que s'ils sont déclarés ou importés.providers
sont de faire connaître les services et les valeurs à DI (injection de dépendance). Ils sont ajoutés à la portée racine et ils sont injectés dans d'autres services ou directives qui les ont comme dépendance.Un cas particulier pour providers
les modules chargés paresseux qui ont leur propre injecteur enfant. providers
d'un module chargé paresseusement sont fournis uniquement à ce module chargé paresseux par défaut (pas à l'ensemble de l'application comme c'est le cas avec d'autres modules).
Pour plus de détails sur les modules, voir également https://angular.io/docs/ts/latest/guide/ngmodule.html
exports
rend les composants, les directives et les canaux disponibles dans les modules auxquels ce module est ajouté imports
. exports
peut également être utilisé pour réexporter des modules tels que CommonModule et FormsModule, ce qui se fait souvent dans des modules partagés.
entryComponents
enregistre les composants pour la compilation hors ligne afin qu'ils puissent être utilisés avec ViewContainerRef.createComponent()
. Les composants utilisés dans les configurations de routeur sont ajoutés implicitement.
Importations TypeScript (ES2015)
import ... from 'foo/bar'
(qui peut se résoudre en unindex.ts
) sont destinés aux importations TypeScript. Vous en avez besoin chaque fois que vous utilisez un identifiant dans un fichier dactylographié qui est déclaré dans un autre fichier dactylographié.
Angular @NgModule()
imports
et TypeScript import
sont des concepts entièrement différents .
Voir aussi jDriven - Syntaxe d'importation TypeScript et ES6
La plupart d'entre eux sont en fait une syntaxe de module ECMAScript 2015 (ES6) que TypeScript utilise également.
import
est une fonctionnalité JS (ES2015), pas une TypeScript. :)
imports
, mais exporter vos déclarables (composant, directive, pipe) avec exports
. Ainsi, les principaux objectifs de imports
et exports
sont des choses différentes. Au lieu de cela, la cible principale de exports
votre declarations
. Vous déclarez votre composant par declarations
, mais pour un composant chargé dynamique, vous devez les insérer entryComponents
. En attendant, les providers
sont gérés dans une autre histoire par DI.
imports
sont utilisés pour importer des modules de prise en charge tels que FormsModule, RouterModule, CommonModule ou tout autre module de fonctionnalité personnalisé.
declarations
sont utilisés pour déclarer les composants, directives, tuyaux qui appartiennent au module courant. Tout le monde dans les déclarations se connaît. Par exemple, si nous avons un composant, disons UsernameComponent, qui affiche une liste des noms d'utilisateur et nous avons également un canal, disons toupperPipe, qui transforme une chaîne en une chaîne de lettres majuscules. Maintenant, si nous voulons afficher les noms d'utilisateur en lettres majuscules dans notre UsernameComponent, nous pouvons utiliser le toupperPipe que nous avons créé auparavant, mais la question est de savoir comment UsernameComponent sait que le toupperPipe existe et comment il peut y accéder et l'utiliser. Voici les déclarations, nous pouvons déclarer UsernameComponent et toupperPipe.
Providers
sont utilisés pour injecter les services requis par les composants, directives, tuyaux dans le module.
Les composants sont déclarés, les modules sont importés et les services sont fournis. Un exemple avec lequel je travaille:
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
Constructions angulaires :import { x } from 'y';
: Il s'agit de la syntaxe de dactylographie standard (syntaxe du ES2015/ES6
module) pour l'importation de code à partir d'autres fichiers. Ce n'est pas spécifique à Angular . De plus, cela ne fait techniquement pas partie du module, il est juste nécessaire d'obtenir le code nécessaire dans le cadre de ce fichier.imports: [FormsModule]
: Vous importez d'autres modules ici. Par exemple, nous importons FormsModule
dans l'exemple ci-dessous. Nous pouvons maintenant utiliser les fonctionnalités que le FormsModule a à offrir tout au long de ce module.declarations: [OnlineHeaderComponent, ReCaptcha2Directive]
: Vous mettez vos composants, directives et tuyaux ici. Une fois déclarés ici, vous pouvez maintenant les utiliser dans tout le module. Par exemple, nous pouvons maintenant utiliser le OnlineHeaderComponent
dans la AppComponent
vue (fichier html). Angular sait où le trouver OnlineHeaderComponent
car il est déclaré dans le @NgModule
.providers: [RegisterService]
: Ici, nos services de ce module spécifique sont définis. Vous pouvez utiliser les services de vos composants en injectant avec l'injection de dépendance.// 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 { }
Ajout d'une feuille de triche rapide qui peut aider après la longue pause avec Angular:
Exemple:
declarations: [AppComponent]
Que pouvons-nous injecter ici? Composants, tuyaux, directives
Exemple:
imports: [BrowserModule, AppRoutingModule]
Que pouvons-nous injecter ici? autres modules
Exemple:
providers: [UserService]
Que pouvons-nous injecter ici? prestations de service
Exemple:
bootstrap: [AppComponent]
Que pouvons-nous injecter ici? le composant principal qui sera généré par ce module (nœud parent supérieur pour une arborescence de composants)
Exemple:
entryComponents: [PopupComponent]
Que pouvons-nous injecter ici? composants générés dynamiquement (par exemple en utilisant ViewContainerRef.createComponent ())
Exemple:
export: [TextDirective, PopupComponent, BrowserModule]
Que pouvons-nous injecter ici? composants, directives, modules ou tuyaux auxquels nous aimerions avoir accès dans un autre module (après importation de ce module)
forRoot()
dans un module chargé paresseusement. Êtes-vous d'accord? Voir le module de base . Le lien vers # module-partagé-pour-racine n'existe plus.