Ich baue eine Winkel 4-Anwendung. Ich bekomme einen Fehler
Error:Component HomeComponent is not part of any NgModule or the module has not been imported into your module.
Ich habe HomeModule und HomeComponent erstellt. Welches muss ich für das AppModule verwenden? Ich bin etwas verwirrt. Muss ich auf HomeModule oder HomeComponent verweisen? Letztendlich suche ich, wenn der Benutzer auf das Home-Menü klickt, sollte er zu der home.component.html geleitet werden, die auf der Indexseite gerendert wird.
App.module ist:
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 ist:
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 ist:
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
zuentryComponents
@NgModule({ imports: [ CommonModule ], exports: [HomeComponent], declarations: [HomeComponent], entryComponents: [HomeComponent] })
Antworten:
Wenn Sie kein verzögertes Laden verwenden, müssen Sie Ihre HomeComponent in app.module importieren und unter Deklarationen angeben. Vergessen Sie auch nicht, aus den Importen zu entfernen
quelle
In meinem Fall muss ich den Server nur neu starten (wenn Sie ihn verwenden
ng serve
).Es passiert mir jedes Mal, wenn ich ein neues Modul hinzufüge, während der Server läuft.
quelle
In meinem Fall fehlte mir meine neu generierte Komponente im
declarations
atapp.module.ts
:quelle
Ich hatte das gleiche Problem. Der Grund war, dass ich eine Komponente erstellt habe, während mein Server noch lief. Die Lösung besteht darin, den Server zu beenden und erneut zu bedienen.
quelle
Die übliche Ursache, wenn Sie verzögerte Lade- und Funktionsformular-Importanweisungen verwenden, ist das Importieren des Routingmoduls anstelle des Seitenmoduls . So:
Falsch :
loadChildren: () => import('./../home-routing.module').then(m => m.HomePageRoutingModule)
Richtig :
loadChildren: () => import('./../home.module').then(m => m.HomePageModule)
Sie werden vielleicht eine Weile damit durchkommen, aber irgendwann wird es Probleme verursachen.
quelle
Ich bin zweimal auf diese Fehlermeldung gestoßen, wobei das verzögerte Laden in Angular 7 und das oben Genannte nicht geholfen haben. Damit beide der folgenden Funktionen funktionieren, MÜSSEN Sie anhalten und neu starten, damit sie vollständig korrekt aktualisiert werden.
1) Zum ersten Mal hatte ich mein AppModule irgendwie falsch in das faul geladene Funktionsmodul importiert. Ich habe diesen Import aus dem faul geladenen Modul entfernt und er hat wieder funktioniert.
2) Zum zweiten Mal hatte ich ein separates CoreModule, das ich in das AppModule importierte, UND dasselbe faul geladene Modul wie # 1. Ich habe diesen Import aus dem faul geladenen Modul entfernt und er hat wieder funktioniert.
Überprüfen Sie grundsätzlich Ihre Hierarchie der Importe und achten Sie genau auf die Reihenfolge der Importe (wenn sie dort importiert werden, wo sie sein sollten). Faul geladene Module benötigen nur ihre eigenen Routenkomponenten / Abhängigkeiten. App- und übergeordnete Abhängigkeiten werden weitergegeben, unabhängig davon, ob sie in AppModule importiert oder aus einem anderen Feature-Modul importiert wurden, das NICHT verzögert geladen und bereits in ein übergeordnetes Modul importiert wurde.
quelle
In meinem Fall verursachten die Importe von realen Routen in
app.component.spec.ts
diese Fehlermeldungen. Die Lösung bestand darin,RouterTestingModule
stattdessen zu importieren .quelle
Winkel faul laden
In meinem Fall habe ich eine Komponente vergessen und erneut importiert, die bereits Teil des importierten untergeordneten Moduls in routing.ts ist.
quelle
Ich bin auf dasselbe Problem gestoßen und nichts von dem, was ich hier sah, funktionierte. Wenn Sie Ihre Komponente im Problem app-routing.module auflisten, ist möglicherweise dasselbe Problem aufgetreten, das ich hatte.
app.module.ts
home / index.ts
app-routing.module.ts
home / home.module.ts
Ich werde nicht behaupten, genau zu verstehen, warum dies der Fall ist, aber wenn Sie die Indizierung zum Exportieren von Komponenten verwenden (und ich würde dasselbe für Dienste usw. annehmen), wenn Sie dieselbe Komponente in separaten Modulen referenzieren, müssen Sie sie aus dem importieren gleiche Datei, in diesem Fall der Index, um dieses Problem zu vermeiden.
quelle
In meinem Fall Angular 6 habe ich die Ordner- und Dateinamen meiner Module von google.map.module.ts in google-map.module.ts umbenannt. Um ohne Überlagerung mit alten Modul- und Komponentennamen zu kompilieren, wurde der ng-Compiler fehlerfrei kompiliert.
In app.routes.ts:
In google-map.routing.ts
In google-map.module.ts:
quelle
<Custom>RouterModule
die Komponente exportieren muss.Ich bin auf das gleiche Problem gestoßen. Ich hatte eine andere Komponente mit demselben Namen in einem anderen Ordner erstellt. Also musste ich in meinem App-Modul beide Komponenten importieren, aber mit einem Trick
import {DuplicateComponent as AdminDuplicateComponent} from '/the/path/to/the/component';
Dann könnte ich in Deklarationen stattdessen AdminDuplicateComponent hinzufügen.
Ich dachte nur, dass ich das dort für zukünftige Referenz belassen würde.
quelle
Überprüfen Sie Ihr Lazy-Modul. Ich habe AppRoutingModule in das Lazy-Modul importiert. Nachdem der Import und die Importe von AppRoutingModule entfernt wurden, begann Mine zu arbeiten.
quelle
In meinem Fall habe ich die Komponente
UserComponent
von einem ModulappModule
in ein anderes verschobendashboardModule
und vergessen, dieappModule
Routendefinition aus dem Routing des vorherigen Moduls in der AppRoutingModule-Datei zu entfernen .Nachdem ich die Routendefinition entfernt hatte, funktionierte es einwandfrei.
quelle
Wenn Sie Lazy Loading verwenden, müssen Sie dieses Modul in ein beliebiges Routermodul laden, z. B. in app-routing.module.ts {Pfad: 'home', loadChildren: './ home.module # HomeModule'}
quelle
Mein Fall ist der gleiche wie bei @ 7guyo erwähnt. Ich benutze Lazyloading und habe dies unbewusst getan:
Anstatt:
quelle
Sie können dies in zwei einfachen Schritten beheben:
Fügen Sie Ihre Komponente (HomeComponent) zum
declarations
Array-entryComponents
Array hinzu.sehen, wie es geht:
quelle
Wenn Sie Lazy Load verwenden, müssen Sie das Modul und das Routing-Modul Ihrer Komponente aus dem App-Modul löschen. Wenn Sie dies nicht tun, wird versucht, sie beim Start der App zu laden und diesen Fehler auszulösen.
quelle
In meinem Fall habe ich falsch importiert, an Modulstelle anstatt Modul (DemoModule) importiertes Routingmodul (DemoRoutingModule) importiert
Falscher Import:
Richtiger Code
quelle
Stellen Sie sicher, dass Ihre Komponente ordnungsgemäß in app-routing.module.ts importiert wurde. In meinem Fall war das der Grund
quelle
Voraussetzungen: 1. Wenn Sie mehrere Module haben 2. Und Sie eine Komponente (angenommen DemoComponent) aus einem anderen Modul (angenommen AModule) in einem anderen Modul (angenommen BModule) verwenden
Dann sollte Ihr AModule sein
und dein BModule sollte sein
quelle
In einigen Fällen kann dasselbe passieren, wenn Sie ein Modul für HomeComponent erstellt haben und in app-routing.module beide direkt angegeben haben
Komponente: HomeComponent, loadChildren: "./ modules /.../ HomeModule.module # HomeModule" im Routes-Array.
Wenn wir versuchen, faul zu laden, geben wir nur das Attribut loadChildren an.
quelle
Ich habe diesen Fehler erhalten, weil ich in 2 verschiedenen Modulen den gleichen Komponentennamen hatte. Eine Lösung ist, wenn es gemeinsam die Exporttechnik usw. verwendet, aber in meinem Fall mussten beide gleich benannt werden, aber der Zweck war unterschiedlich.
Das eigentliche Problem
Während des Imports von Komponente B importierte Intellisense den Pfad von Komponente A, sodass ich die zweite Option des Komponentenpfads von Intellisense auswählen musste. Dadurch wurde mein Problem behoben.
quelle