【问题标题】:AngularJS change URL but not viewAngularJS更改URL但不查看
【发布时间】:2014-01-18 18:35:16
【问题描述】:

我们正在使用 angularJS 和 angular ui-router,并希望更改地址栏中的 URL,但保持视图/状态相同。

我曾尝试使用历史推送状态,但与它发生冲突会导致 $digest 无限循环。

我也尝试过sync() https://github.com/angular-ui/ui-router/wiki/Quick-Reference#urlroutersync 中描述的方法——本质上是在$locationChangeSuccess 上调用preventDefault。但是,这似乎不起作用 - 正如这个 plunkr 所证明的那样:http://plnkr.co/pLC2Ai

有人知道这个问题的任何解决方案吗?

【问题讨论】:

  • 当我点击 Route 1 时,它会变为状态 1,Route 2:状态 2。什么不起作用,它应该做什么?
  • 它不应该显示状态(与现在相比)。我刚刚更新了 plunker,因此您可以看到 $location.path() 并且我希望看到的操作不是更改状态而是更改路径。
  • 更改部分后,您的字面意思是您在 plunker 中看到的 URL 吗?因为您应该检查运行 run.plnkr.co/plunks/pLC2Ai 的代码的 iframe
  • 是的,这就是我的意思,也是的,我检查了 iframe
  • 对我来说,这是完美的答案:stackoverflow.com/a/24102139/1309218

标签: javascript angularjs angular-ui angular-ui-router


【解决方案1】:

当然,我的伙伴! :)

使用$stateChangeStart,而不是$locationChangeSuccess

【讨论】:

  • 我试过这个。它曾经在旧版本的 Angular ui 路由器中工作,但现在不再工作。它可以防止状态和路径发生变化。 plnkr.co/zq3WYq
  • 真的很接近......你看不到对 plunker 的影响,因为它们不会改变地址栏,但我只是在我的应用程序中尝试过。地址栏没有变化,但console.log($location.path()) 确实显示正确。
【解决方案2】:

你试过history.pushState方法吗?

在 Mozilla 的网站上说:“这将导致 URL 栏显示 http://mozilla.org/bar.html,但不会导致浏览器加载 bar.html,甚至不会检查 bar.html 是否存在。”

history.pushState(stateObj, "page 2", "bar.html");

你可能需要注入 $locationProvider 然后设置 $locationProvider.html5Mode(true)。

【讨论】:

猜你喜欢
  • 2018-07-25
  • 2018-08-02
  • 2018-12-29
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 2012-12-10
相关资源
最近更新 更多