Fonctionnalité module pas l'exportation de composants
Mon simple application dispose d'un module racine nommé AppModule et une fonctionnalité module nommé HomeModule. Je suis en train de créer un itinéraire pour un composant nommé HomeComponent (qui fait partie de HomeModule) mais tout ce que j'obtiens est
Module "HomeModule" has no exported member 'HomeComponent'
app.le routage.ts
import { Routes, RouterModule } from '@angular/router'
import { HomeComponent } from './Home/home.module.ts' //HomeComponent not found
const appRoutes: Routes = [
{ path: '', component: HomeComponent }
];
export const appRoutingProviders: any[] = [
];
export const routing = RouterModule.forRoot(appRoutes);
la maison.le module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HomeComponent } from './home.component.ts';
@NgModule({
imports: [ BrowserModule ],
declarations: [ HomeComponent ],
exports: [ HomeComponent ]
})
export class HomeModule { }
la maison.composante.ts
import { Component } from '@angular/core';
@Component({
selector: 'home',
template: '<h1>Hello World</h1>'
})
export class HomeComponent { }
Pourquoi est HomeModule pas l'exportation de ses composants?
Ma réponse à résoudre votre problème?
OriginalL'auteur zakdances | 2016-08-10
Vous devez vous connecter pour publier un commentaire.
Ref1:http://angularjs.blogspot.com/2016/08/angular-2-rc5-ngmodules-lazy-loading.html
Ref2:https://angular.io/docs/ts/latest/guide/ngmodule.html#!#les importations
Question 1: NgModel Import/Export
la maison.le module.ts exportations
HomeModule
, pasHomeComponent
.@NgModule les exportations de rendre Angular2 caractéristiques de ceux de l'exportation de composants disponibles pour le module d'importation. caractéristiques peut être des directives de modèle, sélecteur, injectable de service, etc.
Composante accueil fonction est son sélecteur. Donc importer
HomeModule
dans l'app.module feraHomeComponent
sélecteur dehome
disponible à n'importe quelle application.module du composant.Avoir HomeModule exportation HomeComponent explicitement, index.js et l'index.d.ts sont nécessaires. (Inspiré par Fabio Antunes réponse)
Utiliser le sélecteur de
home
Pour l'utiliser,
exports: [ HomeComponent ]
est nécessaire dans la maison.le module.ts.app.le module.ts
app.composante.ts à l'aide du sélecteur de
home
Utilisation HomeComponent
À utiliser HomeComponent directement, nous devons ajouter index.js et l'index.d.ts ./Maison
./Home/index.js
./Home/index.d.ts
Puis importer la Maison Module npm paquet
app.le routage.ts
Question 2: Routage (à l'enfant module)
De route à un module, l'enfant module nécessité de disposer de sa propre configuration d'un routeur.
Utilisation
loadChildren
dans le parent de routage(app.le routage.ts).Utilisation
RouterModule.forChild
de l'enfant de routage(à la maison.le routage.ts).app.le module.ts
app.composante.ts
app.le routage.ts
À la maison/à la maison.le module.ts
À la maison/à la maison.le routage.ts
path: 'home', loadChildren: './Home/home.module'
avec l'enfant de routagepath: 'home', component: HomeComponent
donnerait des URLs commeexample.com/home/home
, mais apparemment pas. Encore plus, lorsqu'il n'est PAS en répétant leshome
chemin dansHome/home.routing.ts
, puis demanderexample.com/home
échoue. (Juste pour les futurs lecteurs, je suis sûr que vous le savez, @John.)OriginalL'auteur John Siu
Fonction des modules d'importation CommonModule au lieu de BrowserModule
OriginalL'auteur Yakov Fain
Lors de la configuration d'une route où votre
app.route.ts
vous permettra de charger vos HomeModule à l'aide deloadChildren
il y a deux choses que vous devez faire. Soit:ou dans votre
app.route.ts
vous devez ajouter#HomeModule
:Si vous prévoyez d'ajouter des itinéraires supplémentaires à la maison.l'itinéraire.ts, il pourrait être une bonne idée de définir
children
propriété comme:Ce que vous avez à retenir dans le cas ci-dessus, c'est que votre principal
RouterOutlet
dans votre application.composante.ts (si ça s'appelle comme ça), est ne va pas servir la route telle qu'http://some_url/Home/1
afin de charger HomeDetailsComponent.Le truc, c'est que la route servi par
HomeDetailsComponent
est un enfant de l'itinéraire deHomeComponent
et en tant que tel HomeComponent detemplate
outemplateUrl
doit disposer de sa propre<router-outlet></router-outlet>
défini, othwerise, vous obtiendrez un message d'erreurCannot find primary outlet to load 'HomeDetailsComponent'.
OriginalL'auteur Husein Roncevic
@yourfriendzak, il suffit de retirer le".ts' de déclaration ci-dessous:
Espère que ça aide...
OriginalL'auteur Shivam