掌握这几个方法,让你携带参数跳转到详情页面后,刷新页面参数不丢失~

使用场景

点击列表,携带参数跳转到列表详情内页,获取列表详情,刷新页面后,页面数据不丢失。

实现方法

  1. 通过params方式传参
js 复制代码
// 路由配置页面
{ 
   path: '/detail/:id',  //若id后面加?代表这个参数是可选的,即使不传id也不会导致页面无法访问
   name: 'detail', 
   component: Detail 
}
 
// 点击详情列表时
this.$router.push({
   path:`/detail/${id}` 
})
 
// 详情页获取参数
this.$route.params.id
  1. 通过query方式传参
js 复制代码
// 路由配置页面
{ 
    path: '/detail',
    name: 'detail', 
    component: Detail 
}
 
// 点击详情列表时
this.$router.push({
   path:'/detail',
   query:{
       id:id
   }
})
 
// 详情页获取参数
this.$route.query.id

注意:此种传参方式类似get请求传参,是将参数拼接在地址后的,如果通过query方式传递的是对象或数组,在地址栏会被强制转换成[object object],刷新页面获取不到对象值。

解决方法:通过JSON.stringify()将参数转换为字符串,在获取参数时通过JSON.parse()转换成对象。

js 复制代码
let parObj = JSON.stringify(obj)
// 路由跳转
this.$router.push({
   path:'/detail',
   query:{
       obj:parObj
   }
})
 
// 详情页获取参数
JSON.parse(this.$route.query.obj)
  1. 使用props进行组件路由解耦
js 复制代码
// 路由配置
{
   path:'/detail/:id',
   name:'detail',
   component:Detail,
   props:true             // 如果props设置为true,$route.params将被设置为组件属性  
}
 
// 路由跳转
this.$router.push({
   path:`/detail/${id}`
})
 
// 详情页获取参数
export default {
  props:['id'],      // 将路由中传递的参数id解耦到组件的props属性上
  mounted(){
    console.log("id",this.id);  
  }
}

4.使用sessionStorage或localStorage存储参数

js 复制代码
export default {
  name: 'B',
  data() {
    return {
      row: null
    }
  },
  created() {
    let paramsData = localStorage.getItem('params')
    if(paramsData) {
      this.row = this.$route.params.row
      localStorage.setItem('paramsData', JSON.stringify(this.$route.params.row))
    }
  },
  beforeDestroy() {
    localStorage.removeItem('paramsData')
  }
}

5.vuex存储

拓展

js 复制代码
//params跳转
this.$router.push({name: '',params: ''})
//query跳转
this.$router.push({path: '',query: ''})
this.$router.push({name: '',query: ''})

路由跳转中,name和params联用,类似post请求传参;name、path和query联用,类似get请求传参。

经验尚浅(宫尚角&上官浅哈哈),如有说法模糊或错误的地方,请大佬积极指正补充,不吝指教,感谢感谢!!!

相关推荐
小兵张健12 小时前
价值1000的 AI 工作流:Codex 通用前端协作模式
前端·aigc·ai编程
sunny_12 小时前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js
拉不动的猪12 小时前
移动端调试工具VConsole初始化时的加载阻塞问题
前端·javascript·微信小程序
ayqy贾杰14 小时前
Agent First Engineering
前端·vue.js·面试
IT_陈寒14 小时前
SpringBoot实战:5个让你的API性能翻倍的隐藏技巧
前端·人工智能·后端
iceiceiceice15 小时前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
大金乄15 小时前
封装一个vue2的elementUI 表格组件(包含表格编辑以及多级表头)
前端·javascript
葡萄城技术团队16 小时前
【性能优化篇】面对万行数据也不卡顿?揭秘协同服务器的“片段机制 (Fragments)”
前端
程序员阿峰16 小时前
2026前端必备:TensorFlow.js,浏览器里的AI引擎,不写Python也能玩转智能
前端
Jans16 小时前
Shipfe — Rust 写的前端静态部署工具:一条命令上线 + 零停机 + 可回滚 + 自动清理
前端