我在根位于/
的AngularJS应用程序中使用基于哈希的导航。
如果用户像这样导航到我的应用程序:
http://example.com/?foo
页面加载后不久,一些东西(可能是Angular)导致地址栏看起来与我预期的不同。
我看到的:
http://example.com/?foo#/?foo
我期望看到的:
http://example.com/?foo#/
为什么会发生这种情况,我能把它关掉吗?
我敢打赌,你需要处于"html5模式"才能没有哈希片段。。。尽管我不确定。
http://docs.angularjs.org/guide/dev_guide.services.$location
$locationProvider.html5Mode(true).hashPrefix('!');
在你的应用程序配置中,你可以打乱配置参数,它可能会去掉它。
这似乎是在用路径复制哈希。
查看$location服务。它同时具有path()和hash()方法。重复的第二部分是散列,第一部分是路径。
除非您使用的是html5模式,否则Angular的所有URL部分都会出现在片段中。问题是Angular不知道URL的基本部分(也许只是为了加载Angular而需要?foo),所以它不会试图操纵它,它只是把自己的东西作为一个片段放上去。
我建议最好的方法是检查$window.location.search
中的查询字符串,如果你找到了,就重定向到你真正想要的URL。你仍然需要通过分配给$window.location
而不是$location
来进行重定向,这将迫使你的angular应用程序重新加载,但至少你最终会到达你想要到达的地方。
或者,您可以重新配置web服务器以进行适当的重写,但您可能不想或无法这样做。
或者你告诉你的用户只使用他们从应用程序中获得的URL,而不是试图为自己编造。