2016-12-05 8 views
3

で異なる経路ごとに異なるルータのコンセントを使用するために、私は実際にこの1自分のアプリケーションのための角度2.どのように現在の角度2

ベースでWebアプリケーションをされて開発しています:github.com/ngrx/example-app

親コンテナレイアウトのこのいずれかになります。私は、ユースケースには github.com/ngrx/example-app/blob/master/src/app/containers/app.ts

、私は、全体のレイアウトは同じではないでしょうページにつながる特定のルートをしたいと思います。後でスクリーンショットとして保存できるほぼクロムレスのページが必要なので、メニューバーはこのケースでは冗長です。

<bc-layout> 
    <bc-sidenav [open]="showSidenav$ | async"> 
    <bc-nav-item (activate)="closeSidenav()" routerLink="/" icon="book" hint="View your book collection"> 
     My Collection 
    </bc-nav-item> 
    <bc-nav-item (activate)="closeSidenav()" routerLink="/book/find" icon="search" hint="Find your next book!"> 
     Browse Books 
    </bc-nav-item> 
    </bc-sidenav> 
    <bc-toolbar (openMenu)="openSidenav()"> 
    Book Collection 
    </bc-toolbar> 
    <router-outlet></router-outlet> 
</bc-layout> 

私の問題は、私はアプリのコンポーネントは、特定のルートに異なるルータのコンセントを使用して作成する方法を見つけ出すことができないということです。

この

は、コンテナのテンプレートです。まず、AppComponentインスタンスに注入されたActivatedRouteは、 designで、ルートのターゲットコンポーネントがアクセスする実際のActivatedRouteとは異なります(つまり空です)。これは、AppComponentでは空であるため、URLに一致することさえできないことを意味します。

フィールドを時間の遅れのある値に手動で設定し、このフィールドを条件として使用して2つのルータのアウトレットを切り替えることも試みました。最初のアウトレットはレイアウトの内側にあり、もう一方のアウトレットは外側にあります(したがって、ベルとホイッスルなしでレンダリングされます)。ルータのコンセントは一度しか設定されていないため、アプリケーションコンポーネントが最初にロードされた後、他のルータのアウトレットにレンダリングが行われていないように見えるため、これはうまくいきませんでした。

私のような何かをしたいと思い、それを合計するには(代替ソリューションは、より良い仕事かもしれませんが)、以下:私が正しくあなたを理解していれば

<bc-layout> 
    <bc-sidenav [open]="showSidenav$ | async"> 
    <bc-nav-item (activate)="closeSidenav()" routerLink="/" icon="book" hint="View your book collection"> 
     My Collection 
    </bc-nav-item> 
    <bc-nav-item (activate)="closeSidenav()" routerLink="/book/find" icon="search" hint="Find your next book!"> 
     Browse Books 
    </bc-nav-item> 
    </bc-sidenav> 
    <bc-toolbar (openMenu)="openSidenav()"> 
    Book Collection 
    </bc-toolbar> 
    <router-outlet></router-outlet> 
</bc-layout> 
    <router-outlet></router-outlet> <---chromeless outlet 
+0

同じコンポーネントのルータ出口。 [ここにある](http://onehungrymind.com/named-router-outlets-in-angular-2/)これに関する素晴らしい記事。 –

+0

この問題は、レイアウトが定義されているので、ルートコンテナのAppComponentに必要な問題です。つまり、子ルートを定義する必要があります。親とは何でしょうか?現在、私は{path: 'cube/analytics /:id /:algorithm/embed /:part'、canActivate:[CubeExistsGuard]、コンポーネント:CubeAnalyticsEmbedPage} –

答えて

1

、その後、あなたが持っているので、子どものルートを定義する必要があります複数のルータ出口。

子供のルートの仕組みをここでお読みください。あなたが1以上にしたい場合は、[名前のルータアウトレット](https://angular.io/docs/ts/latest/api/router/index/RouterOutlet-directive.html)を使用することができ

https://angular-2-training-book.rangle.io/handout/routing/child_routes.html

+0

はい、これも考えましたが、親と子コンポーネントは何ですか?これは現在のルートである:{ パス: 'キューブ/分析/:ID /:アルゴリズム/埋め込み/:パート' canActivate:[CubeExistsGuard]、 成分:CubeAnalyticsEmbedPage } –

+1

親は、常にその構成要素でありますルータのアウトレットを定義します。ルートに定義された子ノードは、その親ルータのアウトレットに表示されます。 1つのコンポーネントに複数のルータコンセントが必要な場合は、補助的なルータコンセントを使用する必要があります。 –

+0

私は私のルートをリファクタリングしました。私はそれらに、クロムのないものを除いてLayoutComponent(メニューを含むもの)のすべての子を作成しました。また、ルータコンセントをLayoutComponentに追加し、すべてのクロムをLayoutComponentに移動しました。これで、LayoutComponentの外側にあるルートは、AppComponentのルーターアウトレットのみを使用してレンダリングされるため、クロムのないレンダリングが行われます。ありがとう! –

関連する問題