Buduję aplikację kątową 4. Otrzymuję błąd
Error:Component HomeComponent is not part of any NgModule or the module has not been imported into your module.
Stworzyłem HomeModule i HomeComponent. Którego muszę odwołać się do AppModule? Jestem trochę zmieszany. Czy muszę polecić HomeModule lub HomeComponent? Ostatecznie to, czego szukam, to kiedy użytkownik kliknie menu główne, powinien zostać skierowany do home.component.html, który zostanie wyrenderowany na stronie indeksu.
App.module to:
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 to:
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 to:
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
doentryComponents
@NgModule({ imports: [ CommonModule ], exports: [HomeComponent], declarations: [HomeComponent], entryComponents: [HomeComponent] })
Odpowiedzi:
Jeśli nie używasz leniwego ładowania, musisz zaimportować swój HomeComponent do app.module i wspomnieć o nim w deklaracjach. Nie zapomnij też usunąć z importu
źródło
W moim przypadku muszę tylko zrestartować serwer (to znaczy, jeśli używasz
ng serve
).Zdarza mi się to za każdym razem, gdy dodam nowy moduł podczas pracy serwera.
źródło
W moim przypadku brakowało mojego nowego wygenerowanego komponentu w
declarations
atapp.module.ts
:źródło
Miałem ten sam problem. Powodem było to, że utworzyłem komponent, gdy mój serwer jeszcze działał. Rozwiązaniem jest wyjście z serwera i ponowne udostępnienie.
źródło
Typową przyczyną, JEŻELI używasz leniwego ładowania i importu formularzy funkcji, jest importowanie modułu routingu zamiast modułu strony . Więc:
Niepoprawnie :
loadChildren: () => import('./../home-routing.module').then(m => m.HomePageRoutingModule)
Poprawnie :
loadChildren: () => import('./../home.module').then(m => m.HomePageModule)
Może ci się to udać przez jakiś czas, ale w końcu spowoduje to problemy.
źródło
W moim przypadku
app.component.spec.ts
te komunikaty o błędach powodowały importowanie rzeczywistych tras . Rozwiązaniem był importRouterTestingModule
.import { TestBed, async } from '@angular/core/testing'; import { AppComponent } from './app.component'; import { RouterTestingModule } from '@angular/router/testing'; describe('AppComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ AppComponent ], imports: [RouterTestingModule] }).compileComponents(); })); it('should create the app', async(() => { const fixture = TestBed.createComponent(AppComponent); console.log(fixture); const app = fixture.debugElement.componentInstance; expect(app).toBeTruthy(); })); });
źródło
Napotkałem ten komunikat o błędzie przy 2 różnych okazjach, z leniwym ładowaniem w Angular 7 i powyższe nie pomogło. Aby oba poniższe rozwiązania działały, MUSISZ zatrzymać i ponownie uruchomić ng, aby całkowicie zaktualizował się poprawnie.
1) Pierwszy raz w jakiś sposób niepoprawnie zaimportowałem mój AppModule do leniwego załadowanego modułu funkcji. Usunąłem ten import z leniwie ładowanego modułu i ponownie zaczął działać.
2) Za drugim razem miałem oddzielny moduł CoreModule, który importowałem do AppModule ORAZ ten sam leniwie ładowany moduł co # 1. Usunąłem ten import z leniwie ładowanego modułu i ponownie zaczął działać.
Zasadniczo sprawdź swoją hierarchię importów i zwróć szczególną uwagę na kolejność importów (jeśli są importowane tam, gdzie powinny). Leniwie ładowane moduły potrzebują tylko własnego komponentu / zależności trasy. Zależności aplikacji i nadrzędnych zostaną przekazane niezależnie od tego, czy zostaną zaimportowane do AppModule, czy zaimportowane z innego modułu funkcji, który NIE jest załadowany z opóźnieniem i już zaimportowany w module nadrzędnym.
źródło
Napotkałem ten sam problem i nic z tego, co tu widziałem, nie działało. Jeśli wymieniasz swój komponent w problemie app-routing.module, być może napotkasz ten sam problem, co ja.
app.module.ts
home / index.ts
app-routing.module.ts
home / home.module.ts
Nie twierdzę, że rozumiem dokładnie, dlaczego tak jest, ale używając indeksowania do eksportowania komponentów (i zakładałbym to samo dla usług itp.), Kiedy odwołuje się do tego samego komponentu w oddzielnych modułach, musisz je zaimportować z ten sam plik, w tym przypadku indeks, aby uniknąć tego problemu.
źródło
Kątowe leniwe ładowanie
W moim przypadku zapomniałem i ponownie zaimportowałem komponent, który jest już częścią zaimportowanego modułu potomnego w routing.ts.
źródło
W moim przypadku, Angular 6, zmieniłem nazwy folderów i plików moich modułów z google.map.module.ts na google-map.module.ts. Aby skompilować bez nakładek ze starymi nazwami modułów i komponentów, kompilator ng został skompilowany bez błędów.
W app.routes.ts:
W google-map.routing.ts
W google-map.module.ts:
źródło
<Custom>RouterModule
musi eksportować komponent.Napotkałem ten sam problem. Utworzyłem inny komponent o tej samej nazwie w innym folderze. więc w moim module aplikacji musiałem zaimportować oba komponenty, ale ze sztuczką
import {DuplicateComponent as AdminDuplicateComponent} from '/the/path/to/the/component';
Następnie w deklaracjach mógłbym zamiast tego dodać AdminDuplicateComponent.
Pomyślałem, że zostawię to na przyszłość.
źródło
Sprawdź swój moduł Lazy, zaimportowałem AppRoutingModule w module Lazy. Po usunięciu importu i importu AppRoutingModule, Mine zaczął działać.
źródło
W moim przypadku przenosiłem komponent
UserComponent
z jednego modułuappModule
do drugiegodashboardModule
i zapomniałem usunąć definicję trasy z routingu poprzedniego modułuappModule
w pliku AppRoutingModule.Po usunięciu definicji trasy działało dobrze.
źródło
jeśli używasz leniwego ładowania, musisz załadować ten moduł w dowolnym module routera, na przykład w app-routing.module.ts {ścieżka: 'home', loadChildren: './ home.module # HomeModule'}
źródło
Mój przypadek jest taki sam jak wspomniany @ 7guyo. Używam lazyloadingu i robiłem to bezwiednie:
Zamiast:
źródło
Możesz to naprawić, wykonując dwa proste kroki:
Dodaj swój komponent (HomeComponent) do
declarations
tablicyentryComponents
tablicowej.zobacz, jak to zrobić:
źródło
W przypadku korzystania z leniwego ładowania należy usunąć moduł składnika i moduł routingu z modułu aplikacji. Jeśli tego nie zrobisz, spróbuje załadować je po uruchomieniu aplikacji i zgłosi ten błąd.
@NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, FormsModule, HttpClientModule, AppRoutingModule, // YourComponentModule, // YourComponentRoutingModule ], bootstrap: [ AppComponent ] }) export class AppModule { }
źródło
W moim przypadku źle zaimportowałem, w miejsce modułu zamiast importować moduł (DemoModule) zaimportowany moduł routingu (DemoRoutingModule)
Nieprawidłowy import:
Właściwy kod
źródło
Sprawdź, czy komponent jest poprawnie zaimportowany do pliku app-routing.module.ts. W moim przypadku to był powód
źródło
Wymagania wstępne: 1. Jeśli masz wiele modułów 2. I używasz komponentu (załóżmy, że DemoComponent) z innego modułu (załóżmy, że AModule), w innym module (załóżmy BModule)
Wtedy Twój AModule powinien być
a twój BModule powinien być
źródło
W niektórych przypadkach to samo może się zdarzyć, gdy utworzyłeś moduł dla HomeComponent iw module routingu aplikacji, podałeś bezpośrednio oba
komponent: HomeComponent, loadChildren: "./ modules /.../ HomeModule.module # HomeModule" w tablicy Routes.
kiedy próbujemy leniwe ładowanie, podajemy tylko atrybut loadChildren.
źródło
Otrzymałem ten błąd, ponieważ miałem tę samą nazwę komponentu w 2 różnych modułach. Jednym z rozwiązań jest wspólne wykorzystanie techniki eksportowania itp., Ale w moim przypadku oba musiały być nazwane tak samo, ale cel był inny.
Prawdziwy problem
Więc podczas importowania komponentu B, Intellisense zaimportował ścieżkę komponentu A, więc musiałem wybrać drugą opcję ścieżki komponentu z Intellisense i to rozwiązało mój problem.
źródło