vue 路由传参,刷新页面后参数类型改变

问题:列表通过路由传递的 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()转换。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容