Je construis une application angulaire 4. Je reçois une erreur
Error:Component HomeComponent is not part of any NgModule or the module has not been imported into your module.
J'ai créé HomeModule et HomeComponent. Lequel dois-je faire référence à l'AppModule? Je suis un peu confus. Dois-je recommander HomeModule ou HomeComponent? En fin de compte, ce que je recherche, c'est lorsque l'utilisateur clique sur le menu Accueil, il doit être dirigé vers le home.component.html qui sera rendu sur la page d'index.
App.module est:
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 { NavbarComponent } from './navbar/navbar.component';
import { TopbarComponent } from './topbar/topbar.component';
import { FooterbarComponent } from './footerbar/footerbar.component';
import { MRDBGlobalConstants } from './shared/mrdb.global.constants';
import { AppRoutingModule } from './app.routing';
import { HomeModule } from './Home/home.module';
@NgModule({
declarations: [
AppComponent,
FooterbarComponent,
TopbarComponent,
NavbarComponent
],
imports: [
BrowserModule,
HttpModule,
AppRoutingModule,
HomeModule
],
providers: [MRDBGlobalConstants],
bootstrap: [AppComponent]
})
export class AppModule { }
HomeModule c'est:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HomeComponent } from './home.component';
@NgModule({
imports: [
CommonModule
],
exports: [HomeComponent],
declarations: [HomeComponent]
})
export class HomeModule { }
HomeComponent est:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
HomeComponent
àentryComponents
@NgModule({ imports: [ CommonModule ], exports: [HomeComponent], declarations: [HomeComponent], entryComponents: [HomeComponent] })
Réponses:
Si vous n'utilisez pas le chargement différé, vous devez importer votre HomeComponent dans app.module et le mentionner sous les déclarations. N'oubliez pas non plus de supprimer des importations
la source
Dans mon cas, je n'ai besoin que de redémarrer le serveur (c'est-à-dire si vous utilisez
ng serve
).Cela m'arrive à chaque fois que j'ajoute un nouveau module pendant que le serveur est en cours d'exécution.
la source
Dans mon cas, il me manquait mon nouveau composant généré dans le
declarations
atapp.module.ts
:la source
J'ai eu le même problème. La raison était que j'ai créé un composant alors que mon serveur était toujours en cours d'exécution. La solution est de quitter le serveur et de ng servir à nouveau.
la source
Si vous utilisez des instructions de chargement différé et d' importation de formulaire de fonction, la cause habituelle est l'importation du module de routage au lieu du module de page . Alors:
Incorrect :
loadChildren: () => import('./../home-routing.module').then(m => m.HomePageRoutingModule)
Correct :
loadChildren: () => import('./../home.module').then(m => m.HomePageModule)
Vous pourriez vous en sortir pendant un certain temps, mais cela finira par causer des problèmes.
la source
Dans mon cas, les importations de routes réelles
app.component.spec.ts
provoquaient ces messages d'erreur. La solution était d'importer à laRouterTestingModule
place.la source
J'ai rencontré ce message d'erreur à deux reprises, avec un chargement paresseux dans Angular 7 et ce qui précède n'a pas aidé. Pour que les deux fonctions ci-dessous fonctionnent, vous DEVEZ arrêter et redémarrer le service pour qu'il se mette à jour complètement correctement.
1) La première fois que j'avais importé de manière incorrecte mon AppModule dans le module de fonctionnalités chargé paresseusement. J'ai supprimé cette importation du module chargé paresseusement et il a recommencé à fonctionner.
2) La deuxième fois, j'avais un CoreModule séparé que j'importais dans l'AppModule ET le même module chargé paresseusement que le n ° 1. J'ai supprimé cette importation du module chargé paresseusement et il a recommencé à fonctionner.
En gros, vérifiez votre hiérarchie d'importations et portez une attention particulière à l'ordre des importations (si elles sont importées là où elles devraient être). Les modules chargés différés n'ont besoin que de leurs propres composants / dépendances de route. Les dépendances de l'application et du parent seront transmises, qu'elles soient importées dans AppModule ou importées d'un autre module de fonctionnalités qui n'est PAS chargé paresseusement et déjà importé dans un module parent.
la source
Chargement paresseux angulaire
Dans mon cas, j'ai oublié et réimporté un composant qui fait déjà partie du module enfant importé dans routing.ts.
la source
J'ai rencontré ce même problème et rien de ce que je voyais ici ne fonctionnait. Si vous répertoriez votre composant dans le problème app-routing.module, vous avez peut-être rencontré le même problème que moi.
app.module.ts
home / index.ts
app-routing.module.ts
home / home.module.ts
Je ne prétendrai pas comprendre exactement pourquoi c'est le cas, mais lorsque vous utilisez l'indexation pour exporter des composants (et je suppose la même chose pour les services, etc.), lorsque vous référencez le même composant dans des modules séparés, vous devez les importer à partir du même fichier, dans ce cas l'index, afin d'éviter ce problème.
la source
Dans mon cas, Angular 6, j'ai renommé les noms de dossier et de fichier de mes modules de google.map.module.ts en google-map.module.ts. Afin de compiler sans superposition avec les anciens noms de modules et de composants, ng compilateur a été compilé sans erreur.
Dans app.routes.ts:
Dans google-map.routing.ts
Dans google-map.module.ts:
la source
<Custom>RouterModule
doit exporter le composant.J'ai rencontré le même problème. J'avais créé un autre composant avec le même nom sous un dossier différent. donc dans mon module d'application, j'ai dû importer les deux composants mais avec une astuce
import {DuplicateComponent as AdminDuplicateComponent} from '/the/path/to/the/component';
Ensuite, dans les déclarations, je pourrais ajouter AdminDuplicateComponent à la place.
Je pensais juste que je laisserais cela là pour référence future.
la source
Vérifiez votre module Lazy, j'ai importé AppRoutingModule dans le module paresseux. Après avoir supprimé l'importation et les importations d'AppRoutingModule, Mine a commencé à fonctionner.
la source
Dans mon cas, je déplaçais le composant
UserComponent
d'un moduleappModule
à un autredashboardModule
et j'ai oublié de supprimer la définition de la route du routage du module précédentappModule
dans le fichier AppRoutingModule.Après avoir supprimé la définition de l'itinéraire, cela a bien fonctionné.
la source
si vous utilisez le chargement paresseux, vous devez charger ce module dans n'importe quel module de routeur, comme dans app-routing.module.ts {chemin: 'home', loadChildren: './ home.module # HomeModule'}
la source
Mon cas est le même que celui de @ 7guyo mentionné. J'utilise le lazyloading et je le fais inconsciemment:
Au lieu de:
la source
Vous pouvez résoudre ce problème en deux étapes simples:
Ajoutez votre componnet (HomeComponent) au
declarations
tableauentryComponents
array.voir comment faire:
la source
Lorsque vous utilisez la charge différée, vous devez supprimer le module de votre composant et le module de routage du module d'application. Si vous ne le faites pas, il essaiera de les charger au démarrage de l'application et générera cette erreur.
la source
Dans mon cas, j'ai mal importé, à la place du module au lieu d'importer le module de routage importé (DemoModule) (DemoRoutingModule)
Mauvaise importation:
Bon code
la source
Vérifiez que votre composant est correctement importé dans app-routing.module.ts. Dans mon cas, c'était la raison
la source
Prérequis: 1. Si vous avez plusieurs modules 2. Et vous utilisez un composant (supposons DemoComponent) d'un module différent (supposons AModule), dans un module différent (supposons BModule)
Alors votre AModule doit être
et votre BModule doit être
la source
Dans certains cas, la même chose peut se produire lorsque vous avez créé un module pour HomeComponent et dans app-routing.module vous avez directement donné les deux
composant: HomeComponent, loadChildren: "./ modules /.../ HomeModule.module # HomeModule" dans le tableau Routes.
lorsque nous essayons le chargement paresseux, nous ne donnons que l'attribut loadChildren.
la source
J'ai eu cette erreur parce que j'avais le même nom de composant dans 2 modules différents. Une solution est si son utilisation partagée la technique d'exportation, etc., mais dans mon cas, les deux devaient être nommés de la même manière, mais le but était différent.
Le vrai problème
Ainsi, lors de l'importation du composant B, l'intellisense a importé le chemin du composant A donc j'ai dû choisir la 2ème option du chemin du composant d'intellisense et cela a résolu mon problème.
la source