3

私は @ngrx ルーターを使用しており、ルートの 1 つにいくつかの子ルーターがあります (基本的にはルート パラメーターを渡します)。

{
path: '/browse',
component: BrowseComponent,
children: [
  {
    path: ':category',
    component: CategoryComponent
  }
]
}

categoryパラメータには、「free」、「top」、「paid 」などの値を指定できます。これらは、ナビゲーション バーを使用してルーティングされます。

しかし、「 all 」という別のカテゴリ値を追加して、アプリが「 /browse」に移動するときにデフォルトになるナビゲーションバーに追加したい場合、 (私は思う)いくつかのデータ(オブジェクト実際には) 子ルート (つまり、" /browse/all ") に。このデータは子ルート (基本的に子ルートのコンポーネント) で必要であり、サービスを呼び出す必要があります。

次のように「/browse」のように設定してindexルートを試しましたCategoryComponentindex

{
path: '/browse',
component: BrowseComponent,
index: {
  component: CategoryComponent
},
children: [
  {
    path: ':path',
    component: CategoryComponent
  }
]
}

BrowseComponentしかし、データを からに渡す方法はまだわかりませんCategoryComponent。親ルートコンポーネントから子ルートコンポーネントにデータを渡す方法について何か考えはありますか? または、間違っているので、他のより良いアプローチを使用して、すべてのカテゴリを子ルートに追加できます。ありがとう

4

2 に答える 2

1

まず、ngrx を使用するときは、ストアを「唯一の信頼できる情報源」と考える必要があります。つまり、データをフェッチするたびに、ストアからデータを取得する必要があります。

これは、アプリケーション内でデータを操作する場合に適しています。

ただし、データがクエリ文字列のように外部から取得される場合は、(アクションをディスパッチして) ストアに保存し、他のコンポーネントがこれらのデータをストアからフェッチする必要があります。

角度だけでそれを行うことができます:https://angular.io/docs/ts/latest/cookbook/component-communication.html

これは、これらのデータ バインディングの方法を使用できないという意味ではありません。すべてのデータを格納するストアがあると考えてください。

あなたの場合

  constructor(private store: Store<fromRoot.State>, route: ActivatedRoute) {
    this.actionsSubscription = route.params
      .select<string>('path')
      .map(path => new action.SomeAction(path))
      .subscribe(store);
  }

お役に立てば幸いです。

于 2016-10-17T21:49:02.780 に答える