2016-11-01 5 views
4

マスター/詳細ビューでルーティングに問題があります。私がルート/masterに行くなら、InfoComponentはいくつかの一般的な情報を示すべきです。 /master/1に行くと、DetailsComponentにはid 1のアイテムのデータが表示されるはずです。どちらの場合も、MasterComponentには選択したIDまたは何も表示されません。マスター/詳細の子ルートの変更を角2で登録する

これはかなりうまく動作します。しかし、問題は、私は私がそれを強調することができるようにMasterComponentOnInitで選択:idに加入したいということである。このような何か:

this.selectedId = this.route.params.map((params: Params) => params["id"]) 

しかし:id子ルートparamですので、それは動作しません。 firstchildはInfoComponentまたはDetailsComponentが表示されているかどうかに応じて別のルートになるため、this.route.firstChildを使用することはできません。

MasterComponentが2つの子コンポーネントの表示の間で変更されたときに、観察可能な(:idの)変化が得られますか?

これは私のルーティングモジュールです:

@NgModule({ 
    imports: [ 
     RouterModule.forChild([ 
      { 
       path: "master", 
       canActivate: [AuthenticationGuardService], 
       children: [ 
        { 
         path: "", 
         component: MasterComponent, 
         children: [ 
          { 
           path: "", 
           component: InfoComponent 
          }, 
          { 
           path: ":id", 
           component: DetailsComponent 
          } 
         ] 
        } 
       ] 
      } 
     ]) 
    ], 
    exports: [ 
     RouterModule 
    ] 
}) 
export class MyRoutingModule { } 

は、だから私は希望の何かのような何かを行うことです。

this.selectedIdはルートが /master/1場合、値 1を持つ Observableある
this.selectedId = this.route.params.map((params: Params) => params["id"]) 

ルートが/masterの場合はnullの値を返します。

答えて

1

どちらか

this.route.firstChild.params.map(...) 

または子から親にのparamsの変更を伝えるために、共有サービスを使用します。例については、https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-serviceを参照してください。

+0

うん、 'firstChild'は実際には動作しません。なぜなら、アクティブな子コンポーネントのどれに応じて異なるのでしょうか。私は、 'MasterComponent'の'/master/1'から '/ master'にURLが変更されたときに何とか変更を購読できることを期待していました。だから、私は子コンポーネントに論理を含まないと本当にそれを行うことができないのですか?それはバカだ.../ – Joel

+0

'firstChild'から実際にどのコンポーネントが追加されたかという情報を得ることができます。興味のないコンポーネントのパラメータ変更を無視します。 –

+1

私は何を記述するためにプランナーを設定しますか平均:) – Joel

関連する問題