我在以/
为根的AngularJS应用中使用基于哈希的导航。
如果用户导航到我的应用程序,请执行以下操作:
http://example.com/?foo
页面加载后的某个时刻,某些内容(可能是Angular)导致地址栏看起来与我预期的不同。
我看到了什么:
http://example.com/?foo#/?foo
我期待看到的内容:
http://example.com/?foo#/
为什么会发生这种情况,我可以将其关闭吗?
答案 0 :(得分:3)
我打赌你需要处于'html5模式'才能没有哈希片段......虽然我不确定。
http://docs.angularjs.org/guide/dev_guide.services。$位置
$locationProvider.html5Mode(true).hashPrefix('!');
在你的应用配置中,你可以搞乱那个配置参数,它可能会摆脱它。
答案 1 :(得分:0)
这似乎与路径重复哈希。
查看$ location服务。它有path()和hash()方法。第二个重复部分是哈希,第一部分是路径。
答案 2 :(得分:0)
除非您使用html5模式,否则URL的所有Angular都会出现在片段中。问题是Angular不知道URL的基本部分(可能只需要?foo来加载Angular)所以它不会试图操纵它,它只是把它自己的东西放在片段上
我建议最好的方法是检查$window.location.search
查询字符串,如果找到,则重定向到您实际想要的URL。您仍然需要通过分配到$window.location
而不是$location
进行重定向,这会强制您的角度应用重新加载,但至少您最终会到达您想去的地方。
或者,您可以重新配置Web服务器以进行适当的重写,但您可能不希望或无法执行此操作。
或者您告诉您的用户只使用他们从应用中获取的网址,而不是尝试自己制作网址。