2017-01-30 19 views
3

私はこのルータを持っている:例外:キャッチされていません(約束しています):エラー:いずれのルートにも一致しません。 URLセグメント: '詳細'

import { Route, RouterModule } from '@angular/router'; 
import { ProjectDetailsComponent } from '../components/project-details/project-details.component'; 

export const ROUTES: Route[] = [ 
    { 
    path: '', 
    redirectTo: '/details', 
    pathMatch: 'full' 
    }, 
    { 
    path: 'details/:id', 
    component: ProjectDetailsComponent 
    } 
]; 

はまた、私はProjectDetailsComponentという名前の適切なコントローラを持っています。

これは私が私のルートを登録している私のアプリモジュール、次のとおりです。

import { NgModule } from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { RouterModule } from '@angular/router'; 

// Custom components 
import { AppComponent } from './app.component'; 
import { ProjectDetailsComponent } from './components/project-details/project-details.component'; 

// Routes 
import { ROUTES } from './services/router'; 

@NgModule({ 
    imports: [ 
    BrowserModule, 
    RouterModule.forRoot(ROUTES, { useHash: true }) 
    ], 
    declarations: [AppComponent, ProjectDetailsComponent], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { 
} 

そして、私は「/詳細」のルートを使用してProjectDetailsComponentにリダイレクトし、それを送信しようとしたその私のapp.component、プロジェクトID:

import { Component, OnInit } from '@angular/core'; 
import { IProject } from './domain/projects 
import { Router } from '@angular/router'; 
// Routes 
import { ROUTES } from './services/router'; 

@Component({ 
    selector: 'projects-app', 
    templateUrl: 'app/app.component.html' 
}) 
export class AppComponent implements AfterViewInit { 
    public activeProject: IProject; 
    public projects: Array<IProject>; 

    constructor(public router: Router) { 
    } 

    ngOnInit() { 
     this.router.navigate(['/details', this.activeProject.Id]); 
    } 
} 

しかし、私は '詳細/:ID' に移動しようとすると、ルータ、私はエラーを以下の取得:

C:\Sources\SolarPro\build\debug\resources\app\node_modules\@angular\core\bundles\core.umd.js:3521 EXCEPTION: Uncaught (in promise): 
    Error: Cannot match any routes. URL Segment: 'details' 

私の問題を手伝ってください。

+0

'/details/1'に直接アクセスすると動作しますか? – shusson

+0

私は電子アプリでAngular2を使用していますが、私はこの方法をどのように確認できるのか分かりません。 'window.location.assing()'を使って場所を変更しようとすると、期待通りに動作しません。しかし、もし私が 'this.router.navigateByUrl("/app/details/1 ");' を使用すると、前のエラーが出ます。 –

答えて

2

リダイレクトは、コンポーネントが定義されていない/detailsになります。 /detailsのコンポーネントを定義する必要があります。

routes.ts

export const ROUTES: Routes = [ 
    { 
    path: '', 
    redirectTo: '/details', 
    pathMatch: 'full' 
    }, 
    { 
    path: 'details', 
    component: DetailsComponent 
    }, 
    { 
    path: 'details/:id', 
    component: ProjectDetailsComponent 
    } 
]; 

details.component.ts

@Component({ 
    selector: 'app-details', 
    templateUrl: './details.component.html', 
    styleUrls: ['./details.component.css'] 
}) 
export class DetailsComponent implements OnInit { 

    constructor(private router: Router) { } 

    ngOnInit() { 
    this.router.navigate(['/details', 1]); 
    } 

} 
+0

お返事ありがとうございます。私はこのようにしました。しかし、 'id'を渡しても、常にProjectDetailsComponentではなく' DetailsComponent'に行きます。私がすべてのルートに同じコンポーネントを設定した場合、私はいつも 'ProjectDetailsComponent'に期待どおりに行きますが、' id'を得ることができません。 –

+0

あなたのapp.component.htmlにルータコンセントを追加しましたか? – shusson

+0

はい。やったよ。 「

」 –

0

私はすべての可能な解決策、同じ問題が適用されます直面したが、最終的には、これは私の問題を解決する

export class AppRoutingModule { 
constructor(private router: Router) { 
    this.router.errorHandler = (error: any) => { 
     this.router.navigate(['details']); // or redirect to default route 
    } 
    } 
} 

これは、角度4がデフォルトルートを与えていないのでエラーキャッチを処理し、dにリダイレクトできるため機能しますエラーのルート

関連する問題