我在基于/
.
如果用户像这样导航到我的应用程序:
http://example.com/?foo
页面加载后片刻,某些东西(可能是 Angular)导致地址栏看起来与我预期的不同。
我所看到的:
http://example.com/?foo#/?foo
我期望看到的:
http://example.com/?foo#/
为什么会发生这种情况,我可以将其关闭吗?
我在基于/
.
如果用户像这样导航到我的应用程序:
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('!');
在您的应用程序配置中,您可能会弄乱该配置参数,它可能会摆脱它。
除非您使用 html5 模式,否则 Angular 的所有 URL 部分都会出现在片段中。问题是 Angular 不知道 URL 的基本部分(也许 ?foo 只是为了让 Angular 加载)所以它不会尝试操纵它,它只是将自己的东西作为片段放置.
我建议最好的办法是检查$window.location.search
一个查询字符串,如果你找到一个重定向到你真正想要的 URL。您仍然需要通过分配到$window.location
而不是进行重定向$location
,它会强制您的角度应用程序重新加载,但至少您最终会到达您想要到达的位置。
或者,您可以重新配置您的 Web 服务器以进行适当的重写,但您可能不想或无法这样做。
或者你告诉你的用户只使用他们从应用程序中获得的 URL,而不是试图自己弥补它们。
这似乎是用路径复制哈希。
查看 $location 服务。它同时具有 path() 和 hash() 方法。第二部分,重复部分是哈希,第一部分是路径。