Angular 的 queryParams
是一种用于在路由之间传递参数的方式。这些参数会被编码并附加到 URL 中,以便在不同的路由组件之间共享数据。
queryParams
可以轻松地在不同的路由之间传递数据。queryParams
可以传递字符串、数字、布尔值等基本类型,也可以传递对象,但对象会被序列化为 JSON 字符串。
你提到在使用 Angular 9 时,queryParams
正在向路由 URL 中添加额外的字符。这通常是由于参数编码或序列化问题引起的。
在传递参数之前,使用 encodeURIComponent
对参数进行编码:
import { Router } from '@angular/router';
constructor(private router: Router) {}
navigateWithParams() {
const param = 'some value with spaces';
this.router.navigate(['/target-route'], {
queryParams: { param: encodeURIComponent(param) }
});
}
在目标组件中解码:
import { ActivatedRoute } from '@angular/router';
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.route.queryParams.subscribe(params => {
const param = decodeURIComponent(params['param']);
console.log(param);
});
}
如果你需要传递一个对象,确保在目标组件中正确解析 JSON 字符串:
navigateWithObjectParams() {
const obj = { key: 'value', anotherKey: 'anotherValue' };
this.router.navigate(['/target-route'], {
queryParams: { obj: JSON.stringify(obj) }
});
}
在目标组件中解析:
ngOnInit() {
this.route.queryParams.subscribe(params => {
if (params['obj']) {
const obj = JSON.parse(params['obj']);
console.log(obj);
}
});
}
通过以上方法,你应该能够解决 queryParams
向路由 URL 中添加额外字符的问题。
领取专属 10元无门槛券
手把手带您无忧上云