угловой ui-маршрутизатор: как перезагрузить состояние при изменении параметра пути, но не перезагрузить при изменении параметра запроса?

например, я хочу, чтобы это изменение в навигации, чтобы обновить состояние:

  • #/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

2 ответов


я создал plunker, показав, что ui-router характеристика reloadOnSearch работает, как описано здесь:

reloadOnSearch:

Boolean (по умолчанию true). Если false не будет retrigger то же самое состояние просто так поиск/запрос с параметрами изменилось. Полезно, когда вы хотите изменить $ 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

смотрите, что все в действии здесь...


Это ошибка в UI-маршрутизаторе, которая была исправлена в выпуске 0.2.15:

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

обновление до последней исправит проблему