Angular $位置.如果用户使用hashbang提交URL,如何在html5Mode(true)中解析查询字符串?

Iev*_*nov 5 javascript angularjs

我正在开发一个搜索页面,并且要求在URL中存储所有选定的过滤器和其他状态,以便用户可以共享其作业的结果.

我使用angular $ location.search()来更新和解析URL.位置提供商设置如下:

$locationProvider.html5Mode(true).hashPrefix('!');
Run Code Online (Sandbox Code Playgroud)

旧版浏览器的用户与使用现代浏览器的用户共享带有hashbang的链接时,问题就开始.在这种情况下,$ location.search()将不返回任何内容.

据我所知,原因是在html5模式后"#"启动$ location.hash()而不是$ location.search().但是hashPrefix('!')的目标是什么?我认为应该解决这个问题......

如果用户使用hashbang提交URL,我怎么能解析html5Mode中的查询字符串(true)?

Xan*_*iff 0

好吧,如果您将 html5Mode 设置为 true,则会处理 Angular 内的所有路由,但它不会反映服务器如何路由到您的应用程序。您现在可能已经为 hashbang 设置了路由,但是如果您还在服务器上提供没有它们的路由怎么办?

据我了解,如果您将 html5Mode 设置为 true 并且旧版浏览器不支持它,它会自动回退到哈希标签路由。如果有人捕获该 URL,然后与朋友分享,并且您的服务器支持在任何情况下正确地将查询、路由和深层链接转换为您的 Angular 应用程序,那么您似乎已经被覆盖了。