我需要在打开新窗口并导航到某个状态后修改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#/newstate
到localhost: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已编码。因为即使我删除额外的'#/'除非我用实际字符替换编码字符,否则它仍然无效。 请帮忙。
由于
答案 0 :(得分:2)
我认为你使用的是错误的方法。您希望使用$location.url
,这样您就可以同时设置path
,query
和hash
值。但您可能最好分别设置query
和hash
,因为您无需更改整个网址。
$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指令......
这是一个非常糟糕的做法。