2017-05-11 5 views
0

Ich habe einige interessante Situation während der Entwicklung von Anwendung mit Angular 4.1.1 getroffen. Ich habe immer Routing in einem Modul erklärt und ich mache es in alle Module.Application Routing überschreibt Module Routing

Zum Beispiel new-cars.routing.module.ts:

import { NgModule } from '@angular/core'; 
import { RouterModule, Routes } from '@angular/router'; 

import { NewCarsComponent} from './new-cars.component'; 
import { NewCarsResolver } from './new-cars.resolver';  

@NgModule({ 
    imports: [ 
     RouterModule.forChild([ 
      { 
       path: 'cars/:id', 
       component: NewCarsComponent, 
       resolve: { 
        card: NewCarsResolver 
       } 
      } 
     ]) 
    ], 
    exports: [RouterModule] 
}) 

export class NewCarsRoutingModule { } 

Dann habe ich gelesen, diese article zu umleiten zu Komponente "404 Not Found", wenn Benutzereingaben nicht URL-Adresse exisiting. Und ich erklärte, diesen Weg in app-routing.module.ts:

export const routes: Routes = [ 
    { path: '**', component: PageNotFoundComponent } 
]; 

und jetzt alle Seiten zeigen Page not found.

app.module.ts:

import ...; 
import { NewCarsModule } from './new-cars/new-cars.module';  
import ...;  

@NgModule({ 
    imports: [ 
     RouterModule, 
     BrowserModule, 
     AppRoutingModule, 
     HomeModule, 
     SearchModule, 
     CoreModule,    
     NewsCarsModule, 
    ], 
    declarations: [ 
     AppComponent, 
     PageNotFoundComponent 
     ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

Meine Fragen ist Ist es möglich, { path: '**', component: PageNotFoundComponent } nur an einem Ort zu schreiben, nicht in allen Komponenten?

+0

dies geschieht in der Regel, wenn Ihr Router-Module in der falschen Reihenfolge eingeführt werden; Ihre Wildcard-Route (404) muss die * letzte * Route in der Routenliste sein, nachdem alle anderen Routen importiert wurden. – Claies

+0

@Claies Ich erkläre Routen nicht in 'const appRoutes: Routes = [...]', aber ich erkläre Routen in ** modules **. Anwendungsrouten überschreiben also Modulrouten. Es sieht so aus, als ob 'Angular' die Datei' app-routing.module.ts' für das Routing sieht und sich dann zu Modulen bewegt, in denen sich beispielsweise 'new-cars.routing.module.ts' befindet. – StepUp

+0

Können Sie AppModule hinzufügen? – yurzui

Antwort

2

Das Hauptproblem hier ist die Reihenfolge Ihrer Routen.

@NgModule({ 
    imports: [ 
    ... 
    NewsCarsModule, // this order is important 
    AppRoutingModule // where you declared PageNotFoundComponent 
    ], 
    ... 
}) 
export class AppModule {} 

Siehe auch

+0

hinzufügen, so dass ich keine Deklarationen in '@ NgModule' von' app.module.ts' benötige? – StepUp

+1

Ich zeigte nur Importe – yurzui

+0

Ich habe merkwürdigen Fehler jetzt getroffen: 'Unhandled Promise Ablehnung: Komponente PageNotFoundComponent ist nicht Teil eines NgModule oder das Modul wurde nicht in Ihr Modul importiert. ; Zone: ; Aufgabe: Versprechen.dann; Wert: Fehler: Komponente PageNotFoundComponent ist nicht Teil eines NgModules oder das Modul wurde nicht in Ihr Modul importiert. " – StepUp