Angular UI-Router: 如何在路径参数更改时重新加载状态,但不在查询参数更改时重新加载?

15
例如,我希望在导航中进行此更改以重新加载状态:
  • #/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

你是否曾经找到了解决上述问题的方法?我也需要同样的东西。 - Jon Harding
2个回答

35

我创建了一个plunker,演示了ui-router功能reloadOnSearch按照这里的文档工作正常:

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,
      ...
    })

导航到以下序列将始终重新触发状态重新加载,不是因为参数改变,而是因为状态改变

  1. <a href="#/index/detail/1" ...
  2. <a href="#/index/other/1" ... // 将重新加载
  3. <a href="#/index/detail/2" ... // 因为状态
  4. <a href="#/index/other/2" ... //正在改变

此处查看所有操作...


2
这是对术语的误解。1)搜索/查询参数是作为参数映射到URL的一部分(例如stateName/paramValue/stateName?param1=value1&param2=value2)。映射为状态名称标识符的部分是其余部分。那么reloadOnSearch = false是什么意思?如果更改了URL的参数部分,则不会触发状态重新加载。但是,如果状态本身发生了更改...它将重定向。这样是否更清楚一些? - Radim Köhler
3
ui-router 的角度来看,URL 表示独特的状态定义。它可以是一个或多个/嵌套状态,并带有许多参数。有些甚至可以采用如下格式的查询参数:https://github.com/angular-ui/ui-router/wiki/URL-Routing#query-parameters。但最终,这个 URL 被转换为 1) 状态和 2) 参数。没有更多了。而 reloadOnSearch=false 的意思是:当前状态的任何参数发生变化时,不重新加载。这正是文档所说的,也是我在 plunker 中展示的 1:1 内容。但我只是想解释一下,请不要误解... 我接受你有不同的看法。 - Radim Köhler
2
@MattYork 在你的 OP 中,你正在更改哈希后面的部分,并将 reloadOnSearch 设置为 false - 这是设计用来忽略哈希后面部分的更改的。这个问题非常容易理解。文档可能存在歧义,但 RadimKöhler 只是陈述了它的真实工作原理。 - Josh Ribakoff
1
@JoshRibakoff,URL参数有两种不同的类型:路径和搜索(也称为查询)。reloadOnSearch仅适用于搜索参数,而不适用于路径参数。请参见此问题:github.com/angular-ui/ui-router/issues/1191 - Matt York
1
@MattYork,很遗憾你没有找到不需要黑客攻击的解决方案。请查看最新分支:https://github.com/angular-ui/ui-router/tree/feature-1.0#feature-10-branch,也许未来的1.0版本可以满足你的需求。 - Radim Köhler
显示剩余5条评论

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接