Ответ 1
Это ошибка в UI-Router, которая была исправлена в версии 0.2.15:
https://github.com/angular-ui/ui-router/releases
Обновление до последних исправит проблему
Например, я хочу, чтобы это изменение в навигации для перезагрузки состояния:
#/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
Это ошибка в UI-Router, которая была исправлена в версии 0.2.15:
https://github.com/angular-ui/ui-router/releases
Обновление до последних исправит проблему
Я создал 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
Смотрите, что все в действии здесь...