为什么Angular将我的#标签替换为%23?

时间:2013-11-25 19:45:03

标签: angularjs

当我使用$location.path(url)重定向时,Angular会将#替换为%23

var path = $location.path() + "/#" + categoryId;
$location.path(path);

如何确保Angular不会用%23替换我的hastag?

2 个答案:

答案 0 :(得分:3)

您所体验的是正常的。当您使用$ location.path()设置新路径时,您不希望使用#字符,因为您的URL中已有一个。如果您仍然这样做,就像在您的示例中一样,您的#(URL中的第二个)将自动转义,因为您在网址中只能有一个未转义的#。

长话短说,要么在您的分类之前绝对需要这个#,那么在检索路径时你需要使用decodeURIComponent。或者更容易我建议您不要使用此字符并将代码替换为:

var path = $location.path() + "/" + categoryId;
$location.path(path);

答案 1 :(得分:0)

使用$location.path('#/')作为root时发生了这种情况。这是因为如果我们附加到路径中的前面,则角度$location.path会对#tag进行编码。而不是$location.path('#/')使用$location.path('')解决了root的问题。

子路径的

使用$location.path('/something'),其中angular将附加#tag并导航到网址<base>/#/something