2017-02-09 16 views
3

私はモーダルウィンドウに補助ルートを使用しようとしています。私が何を試しても、それを解決することはできません。私はルーティングエラーを取得します。ここに私のアプローチだ...角2ルータは子補助ルートを解決しません

app.component.html

<router-outlet></router-outlet> 
<router-outlet name="modal"></router-outlet> 

管理-routing.module.ts

... 
const ROUTES: Routes = [ 
    { 
    path: 'admin', 
    component: AdminComponent, 
    children: [ 
     { 
     path: 'accounts', 
     loadChildren: './accounts/accounts.module#AccountsModule' 
     },{...} 
    ] 
    } 
]; 
... 

アカウント-routing.module.ts

... 
const ROUTES: Routes = [ 
    { 
    path: '', 
    children: [ 
     { 
     path: '', 
     component: AccountsIndexComponent 
     },{ 
     path: 'new', 
     component: AccountsNewComponent 
     },{ 
     path: ':id', 
     component: AccountsShowComponent 
     },{ 
     path: ':id/edit', 
     component: AccountsEditComponent, 
     outlet: 'modal' 
     } 
    ] 
    } 
]; 
... 

modal.service.ts

... 
    constructor(
    private router:Router, 
    private route:ActivatedRoute 
) { } 
    open(route:Array<any>) { 
    this.router.navigate(
     [{outlets: {drawer: route}}], {relativeTo: this.route} 
    ) 
    } 
    ... 

私はそれは私がそれを行うことになっています思いものです/admin/accounts(modal:1/edit)に移動しようとするModalService.open([account.id, 'edit'])を呼び出し。しかし、私はちょうどそれが1/edit URLセグメントと一致することができないというエラーを取得します。

NavigationError(id: 2, url: '/admin/accounts(modal:1/edit)', error: Error: Cannot match any routes. URL Segment: '1/edit') 

は、私は次のことを試してみた、彼らは...どちらか動作しませんでした

ModalService.open(['accounts', account.id, 'edit']) 
ModalService.open(['admin','accounts', account.id, 'edit']) 
+0

私はまったく同じ問題を抱えています。あなたは解決策を見つけましたか? –

+0

決してしなかった。私たちはあきらめて、ng-bootstrapライブラリ – Brian

答えて

2

読み込まれてから、子供の補助ルートを防ぎ、ルータでknown bugがあるようですとき親パスを使用すると、accounts-routing.module.tsでやっていることである、空である:

const ROUTES: Routes = [ 
    { 
    path: '',     // <--- cannot have an empty parent path... 
    children: [ 
     { 
     path: ':id/edit', 
     component: AccountsEditComponent, 
     outlet: 'modal'  // <--- ...with child aux outlet 
     } 
    ] 
    } 
] 

問題を回避するために、我々はパスのために何かを提供しなければなりません。ここで

this.router.navigateByUrl('accounts/(modal:1/edit)') 

は次のとおりです。

<a [routerLink]="['accounts', {outlets: {'modal': ['1/edit']}}]"> 

またはプログラム的に:

const ROUTES: Routes = [ 
    { 
    path: 'accounts', 
    ... 

は、あなたがrouterLinkからいずれかのあなたのAUXルートにナビゲートすることができます:たとえば、あなたはあなたのパス'accounts'に名前を付ける場合working Plunkrこれを理解し、子補助経路のロードに成功したことを証明しました。

+1

Ughを使ってモーダルを表示することに決めました。私があきらめる前に、この問題は1日か2日、私のお尻を蹴った。これが修正されるまで私は別のアプローチで立ち往生しているように見えます。私たちのアプリはあまりにも大きいため、1つの機能の遅延ロードを落とすことはありません。 @Mike Chamberlainのお返事ありがとう! – Brian

+0

あなたは本当にレイジーローディングを落とさなければなりませんか?遅延ロードされたモジュールに余分な(無意味な)URLセグメントを含めるだけでは十分ではないでしょうか?あなたの新しいアカウントルートは '/ admin/accounts/dummy/new'のようなものでしょうか?醜いですが、うまくいくかもしれませんか? –

+0

ええ、それはうまくいくだろうが、私にとっては少し醜いかもしれないと思う:)私はこの時点で、ルータが固定されるとブートストラップモーダルとリファクタリングに固執すると思います – Brian

関連する問題