问题:列表通过路由传递的 boolean 类型参数,刷新界面变成string。
// 列表页面
this.$router.push({
path: '/orderdetail/info',
query:{
purchaseId:this.multipleSelection[0].purchaseId,
purchaseNo:this.multipleSelection[0].purchaseNo,
salesMan:this.multipleSelection[0].salesMan,
factory:this.multipleSelection[0].factory,
reportingTime:this.multipleSelection[0].reportingTime,
procurementLeadTime:this.multipleSelection[0].procurementLeadTime,
edit:true
}
})
// 详情页面接收路由传参
this.purchaseId = this.$route.query.purchaseId
进入页面,打印参数类型:
企业微信截图_16843031967197.png
刷新页面,打印参数类型:
企业微信截图_16843032085979.png
后来发现,原因是:
vue-router 传参,不管是 params 形式还是query形式传参,在页面刷新后,params 和 query
对象中的属性所对应的属性值都会被浏览器自身强制转换为string类型
(这一点与浏览器的sessionStorage和localStorage存储对象,对象会被转为string类型,不谋而合),破环原先属性值的数据类型。
解决方法:将参数强制类型
总结:
1、number数据类型:页面刷新后,其类型会转换为 string 类型。
所以,在路由刷新页面,在使用时,不管页面是否刷新,都对传递过来的属性值做一次Number()转换;
2、string数据类型:页面刷新后,其类型依然为string类型;
3、boolean数据类型:页面刷新后,其类型会转换为string类型。
所以,在路由刷新页面,在使用时,不管页面是否刷新,都对传递过来的属性值做一次Boolean()转换;
或者
if(query.isEdit == 'false' || query.isEdit== false){
this.isEdit= false
}else{
this.isEdit= true
}
4、undefined数据类型:页面刷新后,其类型依然为undefined类型;
5、null数据类型:页面刷新后,其类型依然为null类型;
6、object数据类型:页面刷新后,其类型会转换为string类型;
所以,在路由跳转传参页面对属性值做一次JSON.stringify()预处理,然后在路由刷新页面对该值进行JSON.parse()转换。