为什么AngularJS在我的路由中复制查询字符串?

时间:2013-08-08 19:44:10

标签: javascript angularjs web angularjs-routing

我在以/为根的AngularJS应用中使用基于哈希的导航。

如果用户导航到我的应用程序,请执行以下操作:

http://example.com/?foo

页面加载后的某个时刻,某些内容(可能是Angular)导致地址栏看起来与我预期的不同。

我看到了什么:

http://example.com/?foo#/?foo

我期待看到的内容:

http://example.com/?foo#/

为什么会发生这种情况,我可以将其关闭吗?

3 个答案:

答案 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服务器以进行适当的重写,但您可能不希望或无法执行此操作。

或者您告诉您的用户只使用他们从应用中获取的网址,而不是尝试自己制作网址。