web-dev-qa-db-ja.com

angular ui-router:パスパラメータが変更されたときに状態をリロードし、クエリパラメータが変更されたときにリロードしない方法は?

たとえば、このナビゲーションの変更で状態をリロードしたいとします。

  • #/detail/1
  • #/detail/2

しかし、このナビゲーションで状態をリロードしたくありません。

  • #/detail/1?search=blah
  • #/detail/1?search=huzzah

Ui-routerのドキュメントによると、reloadOnSearch: falseはこれを達成するはずですが、以下のプランクを試してください。いつ reloadOnSearch === false、ドキュメントがそうするべきだと書いても、pathパラメータを変更しても状態はリロードされません。

Plunkr: http://run.plnkr.co/ZPy9uabYlkMilwdS/#/param

13
Matt York

これはリリース0.2.15で修正されたUIルーターのバグです。

https://github.com/angular-ui/ui-router/releases

最新にアップグレードすると問題が解決します

2
Matt York

plunker を作成しました。_ui-router_機能reloadOnSearchがドキュメントどおりに機能していることを示しています here

reloadOnSearch:

ブール(デフォルトはtrue)。 falseの場合、再トリガーは行われません同じ状態検索/クエリパラメータが変更されたためです。リロードをトリガーせずに$ location.search()を変更したい場合に役立ちます。

だから、これが言うことは、もし私たちがこのような状態にあるなら

_.state('index.detail', {
      url: '/detail/:id',
      reloadOnSearch : false,
      ...
    })
_

に移動する

  • ui-sref="index.detail({id:1})"

に移動しながら、この状態をロードします

  • ui-sref="index.detail({id:any-other-id})"

何もしません。だが!このように定義された新しい(例:兄弟)状態を導入する場合:

_.state('index.other', {
      url: '/other/:id',
      reloadOnSearch : false,
      ...
    })
_

以下のシーケンスに移動すると、常に状態の再読み込みが再トリガーされますparamが変更されたためではなく、状態が変更されたため

  1. _<a href="#/index/detail/1" ..._
  2. _<a href="#/index/other/1" ... // will relaod_
  3. _<a href="#/index/detail/2" ... // because the state_
  4. _<a href="#/index/other/2" ... // is changing_

すべてが動作していることを確認してください ここ ...

33
Radim Köhler