当前位置: 首页 > news >正文

Vue2 编辑返回保留分页页码解决方案

Vue2 编辑返回保留分页页码解决方案

问题根源

this.$router.back()只是单纯回退历史记录,列表页分页、搜索筛选、页码是存在组件 data 里的,路由回退后组件会重新加载,丢失之前分页状态。

四种主流方案(按推荐程度排序)

方案1:路由传参(最简单,无需缓存)

1. 列表页跳转编辑时,带上当前分页参数

// 列表页 点击编辑handleEdit(row){constpage=this.pageNum;// 当前页码constsize=this.pageSize;// 每页条数this.$router.push({path:`/product/edit/${row.id}`,query:{page,size}// 把分页存在query})}

2. 编辑页保存时,携带页码返回列表

// 编辑确认按钮asyncsubmit(){awaitapi.save(this.form);// 获取跳转过来时携带的分页参数const{page,size}=this.$route.query;if(page){// 跳回列表并带上分页,自动加载对应页this.$router.push({path:'/product/list',query:{page,size}})}else{this.$router.back();}}

3. 列表页 created 读取 query 恢复分页

created(){// 路由带分页则赋值if(this.$route.query.page){this.pageNum=Number(this.$route.query.page);this.pageSize=Number(this.$route.query.size);}this.getList();// 重新请求对应页码数据}

优点:简单无副作用;缺点:url会拼接分页参数

方案2:keep-alive 缓存列表组件(最优体验)

页面不会重新请求,直接保留上次滚动、分页、筛选状态

1. 路由配置开启缓存

<!-- App.vue / 路由出口 --> <router-view v-if="$route.meta.keepAlive" keep-alive></router-view> <router-view v-else></router-view>

2. router/index.js 给列表路由加标记

{path:'/product/list',name:'ProductList',component:ProductList,meta:{keepAlive:true}// 标记需要缓存},{path:'/product/edit/:id',component:ProductEdit}

3. 编辑完成直接回退即可

submit(){awaitsaveApi();this.$router.back();// 列表组件被缓存,页码数据全部保留}

补充:如果需要编辑完强制刷新列表

监听activated钩子,判断是否从编辑页返回:

// ProductList.vueactivated(){// 判断上一页是编辑页,刷新数据if(this.$route.meta.fromEdit){this.getList();this.$route.meta.fromEdit=false;}}

跳转编辑时打标记:

handleEdit(){this.$route.meta.fromEdit=true;this.$router.push(`/product/edit/${id}`)}

方案3:Vuex / Pinia 存储分页状态(多页面共用)

适合多处进入编辑、需要全局保存分页

  1. store 定义分页变量
state:{productPage:{pageNum:1,pageSize:10}},mutations:{setProductPage(state,payload){state.productPage=payload}}
  1. 列表每次请求前更新store
this.$store.commit('setProductPage',{pageNum:this.pageNum,pageSize:this.pageSize})
  1. 列表 created 读取store恢复
created(){constpage=this.$store.state.productPage;this.pageNum=page.pageNum;this.pageSize=page.pageSize;this.getList();}

方案4:本地存储 localStorage(刷新页面也不丢失)

// 列表切换页码时保存changePage(){localStorage.setItem('productPage',JSON.stringify({pageNum:this.pageNum,pageSize:this.pageSize}))this.getList()}// 列表初始化读取created(){constcache=localStorage.getItem('productPage');if(cache){const{pageNum,pageSize}=JSON.parse(cache);this.pageNum=pageNum;this.pageSize=pageSize;}this.getList();}

推荐组合使用方案(项目通用)

  1. 列表路由加keepAlive缓存,返回直接保留分页,体验最好
  2. 如需编辑后刷新列表,搭配路由meta标记,在activated重新请求接口
  3. 若页面复杂、多入口跳转,补充路由query兜底

踩坑提醒

  1. this.$router.back()无法携带参数,单纯回退一定会丢失组件内数据,不要只用back
  2. keep-alive 缓存后created不会再次执行,改用activated处理刷新逻辑
  3. 分页参数一定要转数字,query获取的是字符串,请求接口会报错
http://www.jsqmd.com/news/1065007/

相关文章:

  • OpenClaw企业级办公Agent实战:飞书集成与多Agent协作中枢搭建
  • 450+终端配色方案:从视觉疲劳到高效愉悦的蜕变之旅
  • 无需训练跨模态检索:mEOL实现SVG与图像智能搜索
  • (2026最新)南充防水补漏正规公司甄选推荐:漏水检测维修-暗管漏水精准定位检测漏水点-卫生间/厨房/屋顶/阳台/渗漏水维修-本地人必选的正规测漏公司 - 即刻修防水
  • Prompt组装架构:从提示词到可维护AI工程模块
  • 2026年重庆企业如何选择抖音推广服务商?运营的关键考量与品牌推荐 - 品牌鉴赏官2026
  • 搭建完整的Agent系统:Function Calling与工具调用实战
  • (2026最新)南平防水补漏正规公司甄选推荐:漏水检测维修-暗管漏水精准定位检测漏水点-卫生间/厨房/屋顶/阳台/渗漏水维修-本地人必选的正规测漏公司 - 即刻修防水
  • AudioShare:跨设备音频共享的革命性方案,让声音自由穿梭
  • Java文件安全漏洞审计:从路径遍历到安全编码实践
  • 5步精通开源Mac升级工具:让老旧Mac免费运行最新macOS
  • 阀门流量流阻试验:为什么同样的系统,不同阀门会导致能耗差异?
  • 鸿蒙 OS 布局与组件全解析:从零构建优雅 UI 界面
  • 2026年光谱照度计技术解析与实战选型指南
  • 终极指南:如何在Blender中轻松导入导出3MF文件,实现3D打印工作流无缝衔接
  • PDF文本提取技术革新:Apache-2.0许可下的高性能解决方案
  • 2026年当下,周村企业如何精准选择评价高的水泵风机批发厂家?淄博源茂经贸有限公司深度解析 - 品牌鉴赏官2026
  • 天光云影电视直播软件:Android TV IPTV播放器完整使用指南
  • Django毕设选题推荐:基于 Django 的汽车销售数据分析可视化平台研究与实现 大数据视角下汽车销售可视化管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • FPGA XDMA VS MMIO
  • 恩施闺蜜游怎么选?李李团队李李带队只拼同频女生结伴小团 - 老张爱旅游
  • OpenCore Legacy Patcher:让老旧Mac重获新生的开源利器
  • 084、STM32项目分享开源:智能婴儿监护系统
  • RabbitMQ常见问题介绍
  • 构建MCP生态下AI应用安全防线:CASCADE三层防御架构解析与实践
  • 市值冲破万亿!智谱GLM-5.2开源即登顶,国产大模型诞生首个万亿标的
  • 2026年6月PP板品牌哪家专业,PP板表面硬度比较高 - 品牌推荐师
  • SciPy科学计算库:从零开始到生产部署的完整指南
  • 2026最新国学排盘软件深度横评:规避流派误差与数字断更迷局
  • 如何用WinUtil终极Windows优化工具一键搞定系统管理难题