我正在开发一个搜索页面,并且需要在 URL 中存储所有选定的过滤器和其他状态,以便用户可以共享他们的工作结果。
我使用 angular $location.search() 来更新和解析 URL。位置提供商设置如下:
$locationProvider.html5Mode(true).hashPrefix('!');
当旧版浏览器的用户使用 hashbang 向使用现代浏览器的用户共享链接时,问题就开始了。在这种情况下 $location.search() 将不返回任何内容。
据我了解,原因是在“#”开始 $location.hash() 而不是 $location.search() 之后处于 html5 模式。但是 hashPrefix('!') 的目标是什么?我认为它应该解决这样的问题......
如果用户提交带有 hashbang 的 URL,我如何在 html5Mode(true) 中解析查询字符串?
最佳答案
好吧,如果您将 html5Mode 设置为 true,它会处理 Angular 中的所有路由,但它不会反射(reflect)服务器如何路由到您的应用程序。您现在可能已经为 hashbang 设置了路由,但是如果您还在没有它们的情况下在服务器上提供路由怎么办?
据我了解,如果您将 html5Mode 设置为 true 而旧版浏览器不支持它,它会自动回退到散列标签路由。如果有人要捕获该 URL,然后与 friend 分享它,并且您的服务器支持在任何一种情况下正确地将查询、路由和深度链接转换为您的 Angular 应用程序,那么您似乎已经被覆盖了。
关于javascript - Angular $位置。如果用户提交带有 hashbang 的 URL,如何在 html5Mode(true) 中解析查询字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23308879/