2017-05-11 1 views
0

Angular 4.1.1を使用してアプリケーションを開発しているときに、私はいくつかの興味深い状況に出会った。私はいつもモジュールでルーティングを宣言しており、すべてのモジュールでそれを行います。例えばアプリケーションルーティングがモジュールルーティングをオーバーライドする

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 { } 

それから私は、ユーザーの入力はURLアドレスをexisitingない場合は、 "404見つかりません" コンポーネントにリダイレクトするように、このarticleを読みました。

​​

を、今、すべてのページがPage not foundを示しています。そして、私はapp-routing.module.tsでこのルートを宣言しました。

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 { } 

私の質問はそれがないすべてのコンポーネントには、ただ一つの場所に{ path: '**', component: PageNotFoundComponent }を書くことは可能ですか?

+0

も参照してください。ワイルドカード(404)ルートは、他のすべてのルートがインポートされた後、ルートリストの* last *ルートである必要があります。 – Claies

+0

@Claies私は 'const appRoutes:Routes = [...]'でルートを宣言しませんが、**モジュール**でルートを宣言します。したがって、アプリケーションルートはモジュールルートをオーバーライドします。 'Angular'はルーティングのために' app-routing.module.ts'ファイルを見て、次に 'new-cars.routing.module.ts'のようなモジュールを見て移動します。 – StepUp

+0

AppModuleを追加できますか? – yurzui

答えて

2

ここでの主な問題は、ルートの順序です。

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

は、ルータのモジュールが間違った順序でインポートされた場合、これは一般的に起こる

+0

' app.module.ts'の '@ NgModule'に' declarations'は必要ありませんか? – StepUp

+1

私はちょうどインポートを示しました – yurzui

+0

私は今、奇妙なエラーに遭遇しました: '未処理プロミス拒絶:コンポーネントPageNotFoundComponentはNgModuleの一部ではないか、モジュールがあなたのモジュールにインポートされていません。 ;ゾーン:;タスク:Promise.then;値:エラー:コンポーネントPageNotFoundComponentがNgModuleに含まれていないか、モジュールがモジュールにインポートされていません。 ' – StepUp

関連する問題