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

Javascript 为什么AngularJS在我的路由中复制查询字符串?,javascript,angularjs,web,angularjs-routing,Javascript,Angularjs,Web,Angularjs Routing,我在我的AngularJS应用程序中使用基于哈希的导航,该应用程序位于/ 如果用户像这样导航到我的应用程序: http://example.com/?foo 页面加载后不久,某种东西(可能是角度)导致地址栏的外观与我预期的不同 我看到: http://example.com/?foo#/?foo 我期望看到的是: http://example.com/?foo#/ 为什么会发生这种情况,我可以将其关闭吗?这似乎是在用路径复制哈希 查看$location服务。它同时具有path()和hash()方

我在我的AngularJS应用程序中使用基于哈希的导航,该应用程序位于
/

如果用户像这样导航到我的应用程序:

http://example.com/?foo

页面加载后不久,某种东西(可能是角度)导致地址栏的外观与我预期的不同

我看到:

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

我期望看到的是:

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


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

这似乎是在用路径复制哈希


查看$location服务。它同时具有path()和hash()方法。第二个重复的部分是散列,第一个部分是路径。

我打赌你需要处于“html5模式”才能没有散列片段。。。虽然我不确定

.$地点

$locationProvider.html5Mode(true).hashPrefix('!');

在你的应用程序配置中,你可以搞乱这个配置参数,它可能会把它去掉。

除非你使用的是html5模式,否则Angular的URL的所有部分都会出现在片段中。问题是Angular不知道URL的基本部分(可能只是为了加载Angular才需要?foo),所以它不会试图对其进行操作,它只是将自己的内容作为一个片段放在上面

我建议最好的方法是检查
$window.location.search
以查找查询字符串,如果找到了,请重定向到您真正想要的URL。你仍然需要通过分配到
$window.location
而不是
$location
来实现重定向,这将迫使你的angular应用程序重新加载,但至少你会到达你想要到达的地方

或者,您可以重新配置您的web服务器以进行适当的重写,但您可能不想或无法这样做


或者你告诉用户只使用他们从应用程序中获得的URL,而不是试图为自己编造URL。

你能显示角度路由文件的内容吗?不确定这是否会有帮助,但也许……我只是遇到了这个问题,并且确信很难找到解决方案。但是注入
$locationProvider.html5Mode(true).hashPrefix(“!”)解决了问题。我不是在问哈希片段。我在询问哈希右边的重复查询字符串。我会澄清这个问题。说清楚,angular总是用我的经验中的散列片段复制所有东西。因此,如果你不是在HTML5模式下,你会看到重复,因为angular可以更新“搜索”的名称。如果你更新你的答案以包含上面评论中的信息(这实际上是一个真实的断言),我会将其标记为正确答案。这正是我需要知道的。