我正在努力在Angular 2.4.2中的导航期间清除URL参数。我已尝试附加每个选项以清除下面导航线中的参数,或者使用导航或navigateByUrl中的任何混合,但无法弄清楚如何完成。
/section1/page1?key1=abc&key2=def
作为一个例子,我在路线/section/page1
并希望保持相同的路线但删除所有的url参数,因此最终结果应为{{1}}
答案 0 :(得分:14)
正如DeborahK指出的那样,当我导航到this.router.url时,该URL已经嵌入了url params。为了解决这个问题,我将URL中的params作为字符串剥离,然后使用navigateByUrl跳转到那里。
let url: string = this.router.url.substring(0, this.router.url.indexOf("?"));
this.router.navigateByUrl(url);
答案 1 :(得分:11)
如果您将查询参数传递给没有查询参数的网址,则使用navigateByUrl
会删除查询参数。
或者你可以试试:
this.router.navigate(this.router.url, { queryParams: {}});
注意:navigate
而非navigateByUrl
这有用吗?
答案 2 :(得分:6)
如果您不想重新加载页面,也可以使用Location
import { Location } from '@angular/common';
[...]
this.location.replaceState(this.location.path().split('?')[0], '');
this.location.path()
为您提供当前路径。您可以通过使用?
之前的URL中的所有内容来重置页面路径来删除参数。
答案 3 :(得分:4)
使用skipLocationChange选项,它不会显示参数: 假设你的网址是
现在你的代码中有些东西 将查询参数设置为
Q =&所有放大器; viewtype =总
没有skipLocationChange浏览器中的url(调用导航后)将是:
使用skipLocationChange:true它仍然是
let qp = { q : "all" , viewtype : "total" }
this.router.navigate(['/view'], { queryParams: qp },skipLocationChange: true });
答案 4 :(得分:2)
您可以在导航附加功能中添加replaceUrl: true
。这样,路由器将导航到同一页面,但是您仍然保留了url参数的历史记录状态,同时仍然允许您返回上一条路由。
从文档中
this.router.navigate([], { replaceUrl: true});
答案 5 :(得分:1)
这是一个简单的
this.router.navigate([], {});
//或
this.router.navigate([], {
queryParams: {
param1:'',
param2:''
}
});
答案 6 :(得分:1)
这将清除没有硬编码的 URL,并且不会重新加载页面。
constructor(
private activatedRoute: ActivatedRoute,
private router: Router
)
...
this.router.navigate([], {
relativeTo: this.activatedRoute,
queryParams: {},
replaceUrl: true,
});
答案 7 :(得分:0)
从7.2角度开始,您可以使用状态
发送
import re
fi = "http://pen.jamstec.go.jp/TKC_/public_html/original/dc/dc_2008/dc_2008_141/dc_2008_141_0706+0900_TKC__y30_u.jpg"
result = re.search(r'http://.*?/(.*?)/',fi)
print(result.group(1))
接收
this.router.navigate(['routename'], { state: { param1: 'bar' } });
这样,您甚至可以从模板发送大型复杂对象。