5

我在基于/.

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

http://example.com/?foo

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

我所看到的:

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

我期望看到的:

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

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

4

3 回答 3

3

我敢打赌,您需要处于“html5 模式”才能没有哈希片段……尽管我不确定。

http://docs.angularjs.org/guide/dev_guide.services .$location

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

在您的应用程序配置中,您可能会弄乱该配置参数,它可能会摆脱它。

于 2013-08-09T03:51:09.930 回答
0

除非您使用 html5 模式,否则 Angular 的所有 URL 部分都会出现在片段中。问题是 Angular 不知道 URL 的基本部分(也许 ?foo 只是为了让 Angular 加载)所以它不会尝试操纵它,它只是将自己的东西作为片段放置.

我建议最好的办法是检查$window.location.search一个查询字符串,如果你找到一个重定向到你真正想要的 URL。您仍然需要通过分配到$window.location而不是进行重定向$location,它会强制您的角度应用程序重新加载,但至少您最终会到达您想要到达的位置。

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

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

于 2013-08-09T10:59:58.910 回答
0

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

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

于 2013-08-08T20:23:59.193 回答