2016-05-23 12 views
2

Angular2のルータのリリース候補バージョンでは、thisの質問と同様に、ネストされたルートに問題があります。Angular2 New(RC1)ルータ、ネスト型ルータ/アウトレットナビゲーション

のsrc /クライアント/アプリで

  • を次のように現在、私はルート定義で設定するアプリケーションを持っている/ SRC /クライアント/アプリで

    @Routes([ 
        // some other routes up here 
        { path: '/', component: HomeComponent } 
        { path: '/admin', component: AdminComponent } 
    ]) 
    
  • をapp.component.ts

    @Routes([ 
        // some other routes up here 
        { path: '/dashboard', component: DashboardComponent }, 
    ]) 
    
/+admin/admin.component.ts 10

AppComponentとAdminComponentの両方が<router-outlet>を使用することに注意してください。 /admin/dashboardにアクセスすると、AppComponentのルータコンセントにあるAdminComponentのルータコンセントにネストされています

私は管理セクションで作業しているので、ルート/adminで始まります。ユーザーが適切な権限を持っていない場合は、ホームページに移動します。現在、私はこれを実現しようとしている方法があるのsrc /クライアント/アプリ/ +管理/ admin.component.tsで

  • ngOnInit(): void { 
        if (the user does not have the right permissions) { 
        this.router.navigate(['/']); 
        } 
    } 
    

これは、アプリケーションのルートに移動しますAdminComponent内の別のルートにrouterLinkを作成しようとしているため、AdminComponentテンプレートからエラーがスローされます。私の感想は、パスは正しいものの、私はまだAdminComponentにある<router-outlet>です。どういうわけかこれは新しいルータが相対パスを求めていることが原因です。私は、アプリケーションのルートに移動し、正しいルーターのコンセントにコンポーネントをロードする方法が不明です。これは古いangular2ルータのrouter.parentで解決できるものだと思われますが、これは利用できないので別の解決策が必要です。

ここにコンソールにログインするエラーがあります。

TypeError: Cannot read property 'map' of null 
     at UrlTree.Tree.pathFromRoot (segments.ts:32) 
     at _findUrlSegment (link.ts:87) 
     at _findStartingNode (link.ts:98) 
     at Object.link (link.ts:19) 
     at Router.createUrlTree (router.ts:145) 
     at RouterLink._updateTargetUrlAndHref (router_link.ts:55) 
     at RouterLink.Object.defineProperty.set [as routerLink] (router_link.ts:43) 
     at DebugAppView._View_AdminComponent0.detectChangesInternal (AdminComponent.template.js:247) 
     at DebugAppView.AppView.detectChanges (view.ts:243) 
     at DebugAppView.detectChanges (view.ts:345) 

UPDATE

以前は、AdminComponentテンプレートでrouterLinkの相対パスを絶対パスにそれらを変更

<a [routerLink]="['dashboard']" title="Dashboard">Dashboard</a> 

、すなわちましたが、エラーを取り除くとに正しくナビゲートしますように見えましたルートルート。 Now:

<a [routerLink]="['/admin/dashboard']" title="Dashboard">Dashboard</a> 
+0

あなたのUPDATEは解決策ですか? – nadav

+0

はい、ルータのリンクはURLベースであり、ルートベースではありません。ここで確認してくださいhttp://victorsavkin.com/post/145672529346/angular-router特にRouterLink - その他の構文セクション@nadav –

答えて

0

エラーメッセージは、この問題であることを示しています。https://github.com/angular/angular/issues/8567実行中です。

this.router.navigate(['/']);で使用されている質問に記載されているコードに/というコードが設定されていません。

+0

私はAppComponentのルートとして ''/''を定義しました。それを私の例に含めてはいけません。私はそれを反映するために私の質問を更新しました。私は '* ngFor'でルートを生成していないので、あなたのコメントに同意します –

+0

'/'ルートを'/admin'ルートの下に移動してみてください。 –

+1

AdminComponent絶対パスの 'routerLinks'を動作させるように見えました。上記アップデート –

関連する問題