2017-07-30 12 views
1

Angularは、文字列属性としてのプライマリルートをサポートします。routerLink属性のセカンダリルートURLへの移動

すなわち

<button routerlink="/path1">Click Me!</button> 

しかし、複数のコンセントがある場合には、二次ルートを追加することはできません:

<button routerlink="/path1(foo:/path2)">Click Me!</button> <<-- does not work 

は、この作品を作るための方法はありますか?

注:私はこれを達成するために、その可能性を実現:

<a [routerLink]="['/path1', { outlets: { foo: '/path2' } }]">Click Me!</a> 

私の質問は、これはプレーンな文字列属性を使用して可能であるかどうかについての詳細です(ルータのフレームワークは、舞台裏でそれを解析できます)。

+0

この 'router.navigateByUrl("/path1/foo /)のように[** navigateByUrl **](https://angular.io/api/router/Router/#usage-2)パス2 "); ' –

+0

ちょっと、[私の答え](https://stackoverflow.com/a/45396457/2545680)助けましたか? –

答えて

2

ルータの現在の実装では可能ではないようです。 あなたはそれがここ配列に包まれますrouterLinkに文字列を渡す:

@Directive({selector: ':not(a)[routerLink]'}) 
export class RouterLink { 
    ... 

    } 

    @Input() 
    set routerLink(commands: any[]|string) { 
    if (commands != null) { 
     this.commands = Array.isArray(commands) ? commands : [commands]; <--------------- 
    } else { 
     this.commands = []; 
    } 
    } 

そしてhere is包まcommandsを解析し、それからコンセントを抽出しようとする機能:あなたのよう

function getOutlets(commands: any[]): {[k: string]: any[]} { 
    if (!(typeof commands[0] === 'object')) return {[PRIMARY_OUTLET]: commands}; 
    if (commands[0].outlets === undefined) return {[PRIMARY_OUTLET]: commands}; 
    return commands[0].outlets; 
} 

ラップされたcommandsの値がオブジェクトではない場合 - あなたのケースでは常にデフォルトでprimaryアウトレットになり、このプライマリアウトレットのパスとして値を使用します:

if (!(typeof commands[0] === 'object')) return {[PRIMARY_OUTLET]: commands}; 
+1

私はずっと前にそれを調べて、あなたが正しいと思われます。 'routerLink'で文字列を使用して' outlet'パスにナビゲートすることはできませんが、配列を使用すると完了できます – yurzui

関連する問題