2017-04-26 3 views
1

私はAngular 4.0.3に状況があります。ページには<router-outlet>が2つあります。角度4 - URLに別の店舗のルートを追加せずに経路を更新

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

最初のコンセントはコンテンツのルートを受け入れ、2番目のコンセントはナビゲーションのルートを受け入れます。私はこれを使ってナビゲーションを達成する。

router.navigate(['', {outlets: { nav: [route] } }],{skipLocationChange: true }); 

これは、URLを更新せずにコンセントの内容を変更する - 私は.. (nav:user)のように見えるいかなるurlしたくないので。

問題は残りのコンセントです。私は次のように、機能的には、私は両方のコンセントが適切なコンテンツを持って取得することができますが、それはURLにnavコンセントのルートを追加し続けて

.../user/profile 

...これらは、例えば、クリックされたときにURLを更新しますかこれ...

.../user/profile(nav:user) 

(nav:user)の部分を追加することはできますか?

答えて

1

私は気付いていないいくつかのトリックがない限り...私はあなたができるとは思わない。アドレスバーは、ルート状態を維持するものです。したがって、アドレスバーのセカンダリコンセント情報がなければ、ルータはセカンダリコンセントに正しいルーティングコンポーネントを保持する方法を知らないでしょう。

あなたはここに示されているようnavigateByUrlメソッドをオーバーライドしてみてください:http://plnkr.co/edit/78Hp5OcEzN1jj2N20XHT?p=preview

export class AppModule { constructor(router: Router) { 
    const navigateByUrl = router.navigateByUrl; 

    router.navigateByUrl = function(url: string|UrlTree, extras: NavigationExtras = {skipLocationChange: false}): Promise<boolean> { 
     return navigateByUrl.call(router, url, { ...extras, skipLocationChange: true }); 
    } } } 

あなたが潜在的にあなたがこれを上行う必要がどのルートを確認するには、次にここにロジックを追加することができます。

+0

目的のコンセントの状態が変わるのを防ぐことはできますか?多分その効果を達成するだろうか? – Ciel

+0

状態を変更することなく、どのように経路を設定しますか?たぶん私はあなたの質問やあなたが達成しようとしていることを理解していないかもしれません。プランナーをやることはできますか? – DeborahK

+0

名前付きアウトレットは、ユーザーが明示的にナビゲーションリンクをクリックした場合にのみ変更する必要があります。それはURLに縛られるべきではありません - 私はそれが 'skipLocationChange'を使用して、彼らがナビゲーションの周りをジャンプするときにURLを変更しないままにしておきます。 – Ciel

関連する問題