Angular ui-router: как перезагрузить состояние, когда параметр пути изменяется, но не перезагружается при изменении параметра запроса?

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

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

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

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

Согласно документации ui-router, установка reloadOnSearch: false должна выполнить это, но попробуйте панель ниже. Когда reloadOnSearch === false, изменение параметра пути не перезагружает состояние, даже если документация говорит, что он должен.

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

Ответ 1

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

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

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

Ответ 2

Я создал plunker, демонстрируя, что ui-router функция reloadOnSearch работает как документированная здесь:

reloadOnSearch:

Boolean (по умолчанию 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,
      ...
    })

переход к следующей последовательности всегда будет повторно запускать перезагрузку состояния, не потому, что изменение параметра, а потому, что изменение состояния

  • <a href="#/index/detail/1" ...
  • <a href="#/index/other/1" ... // will relaod
  • <a href="#/index/detail/2" ... // because the state
  • <a href="#/index/other/2" ... // is changing

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