Angulaire 2 Utilisation de composants à partir d'un autre module
J'ai Angulaire 2 (version 2.0.0 - finale) application générée avec angulaires-cli.
Quand je créer un composant et l'ajouter à AppModule
's déclarations de tableau c'est du tout bon, ça fonctionne.
J'ai décidé de séparer les composants, j'ai donc créé un TaskModule
et une composante TaskCard
. Maintenant, je veux utiliser le TaskCard
dans une des composantes de la AppModule
(le Board
composant).
AppModule:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
import { BoardComponent } from './board/board.component';
import { LoginComponent } from './login/login.component';
import { MdButtonModule } from '@angular2-material/button';
import { MdInputModule } from '@angular2-material/input';
import { MdToolbarModule } from '@angular2-material/toolbar';
import { routing, appRoutingProviders} from './app.routing';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
import { UserService } from './services/user/user.service';
import { TaskModule } from './task/task.module';
@NgModule({
declarations: [
AppComponent,
BoardComponent,//I want to use TaskCard in this component
LoginComponent,
PageNotFoundComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
MdButtonModule,
MdInputModule,
MdToolbarModule,
routing,
TaskModule //TaskCard is in this module
],
providers: [UserService],
bootstrap: [AppComponent]
})
export class AppModule { }
TaskModule:
import { NgModule } from '@angular/core';
import { TaskCardComponent } from './task-card/task-card.component';
import { MdCardModule } from '@angular2-material/card';
@NgModule({
declarations: [TaskCardComponent],
imports: [MdCardModule],
providers: []
})
export class TaskModule{}
L'ensemble du projet est disponible sur https://github.com/evgdim/angular2 (kanban-conseil de dossier)
Ce que je suis absent? Ce que j'ai à faire pour l'utiliser TaskCardComponent
dans BoardComponent
?
Vous devez vous connecter pour publier un commentaire.
La règle principale ici est que:
Les sélecteurs qui sont applicables lors de la compilation d'un modèle de composant sont déterminés par le module qui déclare que composant, et la fermeture transitive des exportations de ce module les importations.
Donc, essayer de l'exporter:
Que dois-je exporter?
La minute où vous créez un nouveau module, paresseux ou pas, tout nouveau module et vous déclarer quelque chose en elle, ce nouveau module a un état de propreté(l'aile de Bell a dit dans https://devchat.tv/adv-in-angular/119-aia-avoiding-common-pitfalls-in-angular2)
Angulaire crée transitive module pour chacun des
@NgModule
s.Ce module recueille les directives que soit importé à partir d'un autre module(si transitive module de module importé a exporté des directives) ou déclarées dans le module en cours.
Quand angulaire compile modèle qui appartient à un module
X
elle est utilisée, ces directives qui avaient été recueillies dans X. transitiveModule.directives.https://github.com/angular/angular/blob/4.2.x/packages/compiler/src/jit/compiler.ts#L250-L251
De cette façon, selon l'image ci-dessus
YComponent
ne pouvez pas utiliserZComponent
dans son modèle, cardirectives
tableau deTransitive module Y
ne contient pas deZComponent
parce queYModule
n'a pas importéZModule
dont transitive module contientZComponent
dansexportedDirectives
tableau.Dans
XComponent
modèle, nous pouvons utiliserZComponent
parce queTransitive module X
a des directives tableau qui contientZComponent
parce queXModule
importations module (YModule
) que les exportations (module deZModule
) que les exportations de la directiveZComponent
Dans
AppComponent
modèle on ne peut pas utiliserXComponent
parce queAppModule
importationsXModule
maisXModule
n'est pas exportationsXComponent
.Voir aussi
pourquoi paresseux chargé module a pour importer commonModule? Angulaire 2
Angulaire Module Faq
Vous avez à
export
de votreNgModule
:(Angulaire 2 - Angulaire 7)
Composant peut être déclarée dans un module unique seulement.
Pour utiliser un composant à partir d'un autre module, vous devez effectuer deux tâches simples:
1er Module:
Un composant (appelons cela: "ImportantCopmonent"), nous voulons ré-utilisation dans le 2ème Module de la page.
2ème Module:
Réutilise le "ImportantCopmonent", par l'importation de la FirstPageModule
Noter que dans le but de créer une sorte de "modules", vous devez l'importer
CommonModule
à l'intérieur. Donc, votre initialisation du module code ressemblera à ceci:Plus d'informations sont disponibles ici: https://angular.io/guide/ngmodule#create-the-feature-module
Ce que vous voulez l'utiliser à partir d'un autre module, il suffit de mettre dans le à l'exportation de la matrice de.
Ce
RÉSOLU COMMENT UTILISER UN COMPOSANT DÉCLARÉE DANS UN MODULE DANS UN AUTRE MODULE.
Basé sur Royi Namir explication (Merci beaucoup).
Il manque une partie de la réutilisation d'un composant déclarée dans un Module dans un autre module, tandis que le chargement paresseux est utilisé.
1er: d'Exporter le composant dans le module qui contient:
2e: Dans le module où vous souhaitez utiliser TaskCardComponent:
Comme cette le deuxième module importations dans le premier module, qui les importations et les exportations du composant.
Quand nous importons le module dans le deuxième module, nous avons besoin d'exporter à nouveau. Maintenant, nous pouvons utiliser la première composante de la deuxième module.
MdCardModule
reste une source de confusion pour moiUne grande et bonne approche est de charger le module à partir d'un
NgModuleFactory
, vous pouvez charger un module à l'intérieur d'un autre module en appelant:Je l'ai obtenu à partir de ici.
@yurzui vous avez la bonne solution et merci pour l'explication.
J'ai eu le problème et cette ligne:
exportations: [Commponent]
résolu.