在Angular环境中替换URL

时间:2016-12-01 20:27:48

标签: javascript angularjs

我需要在打开新窗口并导航到某个状态后修改URL。

我的起始页面如下:
localhost:8000/startpage.html
加载时,URL变为
localhost:8000/startpage.html#/
在新窗口中,我将导航到一个新状态:
localhost:8000/startpage.html#/newstate

我想要的是让URL看起来像这样:
localhost:8000/startpage.html?project=1#/newstate

我得到几乎正确的结果,除了不是完全替换URL而是添加
?project=1#/newstatelocalhost:8000/startpage.html#/

所以结果是这样的:
localhost:8000/startpage.html#/%3Fproject=903%23/newstate
而我需要的是:
localhost:8000/startpage.html?project=903#/newstate

以下是一些相关代码:

if ($window.history.replaceState) {
    var newUrl = '?project=903' + '#/case';
    $location.path(newUrl);
    $location.replace();
}; 

对我来说,我有两个问题。额外'#/'在' .html'之后并且URL已编码。因为即使我删除额外的'#/'除非我用实际字符替换编码字符,否则它仍然无效。 请帮忙。

由于

2 个答案:

答案 0 :(得分:2)

我认为你使用的是错误的方法。您希望使用$location.url,这样您就可以同时设置pathqueryhash值。但您可能最好分别设置queryhash,因为您无需更改整个网址。

$location.search('project', '903');
$location.hash('case');

我从/删除了hash,因为没有必要。

此外,默认情况下,angular使用散列模式来导航其路由。如果你想提供一个哈希,我想你需要关闭这个行为。

$locationProvider.html5Mode(true);

在应用程序的配置中设置它。

这是一篇好文章:https://scotch.io/tutorials/pretty-urls-in-angularjs-removing-the-hashtag

答案 1 :(得分:1)

使用AngularJs 1时,#符号通常会跟随加载ngApp指令的页面...如果我错了,请纠正我。

所以我认为唯一的解决办法就是在页面链接上放置你想要#标签的ngApp指令......

这是一个非常糟糕的做法。