同じテンプレートに複数のルーターアウトレットを置くことは可能ですか?
はいの場合、ルートを構成する方法は?
Angular2ベータ版を使用しています。
はい、できますが、Auxルーティングを使用する必要があります。ルーターアウトレットに名前を付ける必要があります。
<router-outlet name="auxPathName"></router-outlet>
そしてルート設定をセットアップします:
@RouteConfig([
{path:'/', name: 'RetularPath', component: OneComponent, useAsDefault: true},
{aux:'/auxRoute', name: 'AuxPath', component: SecondComponent}
])
この例を確認してください: http://plnkr.co/edit/JsZbuR?p=preview また、このビデオ: https://www.youtube.com/watch?v=z1NB -HG0ZH4&feature = youtu.be
RC.5 Auxルートの更新が少し変更されました。ルーターアウトレットで名前を使用してください。
<router-outlet name="aux">
ルーターの設定:
{path: '/auxRouter', component: secondComponentComponent, outlet: 'aux'}
ルーターを設定し、ルーターアウトレットに名前を付けることで、同じテンプレートに複数のルーターアウトレットを作成できます。
これは次のようにして達成できます。
以下のアプローチの利点は、汚い見た目のURLを避けることができることです。例:/ home(aux:login)など
ロード時にappComponentをブートストラップすると仮定します。
app.component.html
<div class="layout">
<div class="page-header">
//first outlet to load required component
<router-outlet name='child1'></router-outlet>
</div>
<div class="content">
//second outlet to load required component
<router-outlet name='child2'></router-outlet>
</div>
</div>
ルーターに以下を追加します。
{
path: 'home', // you can keep it empty if you do not want /home
component: 'appComponent',
children: [
{
path: '',
component: childOneComponent,
outlet: 'child1'
},
{
path: '',
component: childTwoComponent,
outlet: 'child2'
}
]
}
/ homeがロードされると、appComponentは割り当てられたテンプレートを使用してロードを取得し、角度ルーターはルートをチェックし、名前に基づいて指定されたルーターアウトレットの子コンポーネントをロードします。
上記のように、同じルートに複数のルーターアウトレットがあるようにルーターを構成できます。
Auxルートの構文は、新しいRC.3ルーターで変更されました。
Auxルートにはいくつかの既知の問題がありますが、基本的なサポートは利用可能です。
名前付き<router-outlet>
のコンポーネントを表示するルートを定義できます
ルート構成
{path: 'chat', component: ChatCmp, outlet: 'aux'}
名前付きルーターコンセント
<router-outlet name="aux">
補助ルートをナビゲートする
this._router.navigateByUrl("/crisis-center(aux:chat;open=true)");
RouterLinkからのauxルートのナビゲートはまだサポートされていないようです
<a [routerLink]="'/team/3(aux:/chat;open=true)'">Test</a>
<a [routerLink]="['/team/3', {outlets: {aux: 'chat'}}]">c</a>
まだ試していない
こちらもご覧ください 1つのコンポーネントのAngular2ルーター
RC.5 routerLink DSL(createUrlTree
パラメーターと同じ) https://angular.io/docs/ts/latest/api/router/index/Router-class.html#!#createUrlTree-anchor
<a [routerLink]="[{ outlets: { list:['streams'], details:['parties'] } }]">Link</a>
<div id="list">
<router-outlet name="list"></router-outlet>
</div>
<div id="details">
<router-outlet name="details"></router-outlet>
</div>
`
{
path: 'admin',
component: AdminLayoutComponent,
children:[
{
path: '',
component: AdminStreamsComponent,
outlet:'list'
},
{
path: 'stream/:id',
component: AdminStreamComponent,
outlet:'details'
}
]
}
はい、上記の@tomerが言ったようにできます。 @tomerの回答にポイントを追加したいです。
router-outlet
に名前を付ける必要があります。 (aux routing angular2)Angle2ルーティングでは、重要なポイントはほとんどありません。
詳細については here および here。 を参照してください
import {RouteConfig, AuxRoute} from 'angular2/router';
@RouteConfig([
new AuxRoute({path: '/home', component: HomeCmp})
])
class MyApp {}
1つのテンプレートでルーターアウトレットを再利用する別の(ややハッキングな)方法があるようです。
https://stackblitz.com/edit/router-outlet-twice-with-events
ルーターアウトレットはngテンプレートでラップされます。テンプレートは、ルーターのイベントをリッスンすることにより更新されます。すべてのイベントで、テンプレートは空のプレースホルダーと交換および再交換されます。この「スワップ」なしでは、テンプレートは更新されません。
ただし、2つのテンプレートのスワッピング全体が少しハックのように見えるため、これは推奨されるアプローチではないようです。