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



我在根位于/的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,而不是试图为自己编造。

相关内容

最新更新