VUE页面跳转刷新参数丢失问题解决

本文主要讨论在VUE项目中遇到的页面刷新导致参数丢失的问题及其解决方案。作者尝试了VUE的编程式导航、vuex、sessionStorage和localStorage等方法,并详细描述了每个方法的优缺点及适用场景。最终通过结合vuex与sessionStorage成功解决了问题。
部署运行你感兴趣的模型镜像

VUE页面跳转刷新参数丢失问题解决

一、场景

在做本司一个系统的前台过程中,对展示的数据需要进行出修改。也就是简单的表单提交进行数据修改

二、实现

在以前的开发过程中都是将数据放到session中,由于本次用到的框架为VUE,所以在页面跳转以后参数存储问题,本人是费尽心思,苦于无解,在我点击修改之后。第一次在create方法里面是能够获取到参数的。但是,在f5刷新之后发现并没有参数。(我利用的是VUE自带的$router.push({name:'',params{}}))的方式。然而并没有任何效果具体代码如下

create(){
	const device_id = this.$route.params.device.device_id
	// 进行数据加载
	}

F5之后,页面获取不到

三、过程

经过排查搜索,以及寻找度娘。首先我找到一种方案,就是在router.js中配置路由的参数在对应的path中配置,具体参考链接点这里,可能是我自己的框架原因,参照了文中的方法并没有效果。一种方案不行,那就第二种。于是我又找到了vuex的store利用它来管理全局属性,万万没想到它也是在刷新之后不能使用。那第三种吧 就是h5自带的sessionStoreagelocalStoreage,发现这两个东西真的是非常棒,首先sessionStoreage是将数据放到session中(临时),直到浏览器关闭为止,而localStoreage是放在本地存储中(持久),想了想还是sessionStoreage好一点,毕竟程序员都很懒,其实是我不想再去往代码中添加一个清除的代码很累。


在经过一番探索之后,发现sessionStoreage存完数据以后拿出来的是一个Object,lz还是无法获取其属性,由于后台搞的时间久了,以为会跟后台一样传了对象就可以直接调用,再找度娘发现了一偏sessionStoreage的使用 链接在这里,ok至此结合vuex的store与sessionStoreage的setItem和getItem方法成功解决问题

四、总结

后来发现其实不止一种思路。目前来讲,我本人知道的有四种:

1、利用vue自带的编程式跳转,传参的方式为query,但是query传参需要注意一些数据不想暴露的时候,不建议使用。

2、利用cookie,将数据放到cookie中,在页面跳转以后再从cookie中取出来。

3、 利用sessinStoreage将数据存到session中,对session数据进行存取

4 、利用localStoreage将数据存到localStoreage中,但是不及时清理的话会导致硬
盘负担增加

说在最后: 上面内容如有不对的地方请大家多多指教,也希望本文能够帮助到哪些需要帮助的正在编程路上的人。


补充一下: sessionStroage必须保存字符串类型,如果保存为其他类型也会保存为字符串类型,只不过保存完以后可能不是我们想要的结果,比如保存一个Object 取出来的字符串就是‘Object object’

您可能感兴趣的与本文相关的镜像

HunyuanVideo-Foley

HunyuanVideo-Foley

语音合成

HunyuanVideo-Foley是由腾讯混元2025年8月28日宣布开源端到端视频音效生成模型,用户只需输入视频和文字,就能为视频匹配电影级音效

<think> 我们正在解决Vue路由跳转页面刷新导致参数丢失问题。根据引用内容,常见的解决方案包括: 1. 使用query传参:参数会显示在URL中,刷新不会丢失(引用[1][2][4]) 2. 使用params传参并配合路由配置(动态路径参数):需要提前在路由中配置参数(如`/insertparams1/:id/:name`),这样参数会成为URL的一部分,刷新不会丢失(引用[4][5]) 3. 将参数存储在sessionStorage或localStorage中(引用[3]) 4. 使用vuex状态管理 但是,根据引用[3]的建议,我们尽量使用Vue的方式(即前两种方式)来解决。而第三种方案(存储到本地)也可以作为一种备选。 具体方案如下: 方案1:使用query传参 - 传递参数:使用`this.$router.push({ path: '/route', query: { id: 1 } })` - 接收参数:`this.$route.query.id` - 特点:参数会以`?id=1`的形式出现在URL中,刷新页面不会丢失。 方案2:使用params传参并配合动态路由 - 首先在路由配置中定义参数,例如: { path: '/user/:id', name: 'user', component: User } - 跳转时:`this.$router.push({ name: 'user', params: { id: 1 } })` 或者 `this.$router.push('/user/1')` - 接收参数:`this.$route.params.id` - 注意:如果使用path进行跳转,params会被忽略(引用[4]中提到),所以最好用name跳转。 方案3:使用本地存储(sessionStorage或localStorage) - 在跳转前存储参数:`sessionStorage.setItem('param', JSON.stringify(param))` - 在目标页面的created或mounted钩子中取出:`JSON.parse(sessionStorage.getItem('param'))` - 注意:使用完后可以清除,避免影响其他页面。 方案4:使用Vuex - 将参数存储在Vuex的state中,在目标页面Vuex中获取。但是刷新页面会导致Vuex状态丢失,所以通常需要结合本地存储或vuex-persistedstate插件。 其中,方案1和方案2是最常用的,也是Vue路由本身支持的,可以保证刷新丢失(因为参数在URL中)。方案3和4可以作为补充。 根据引用[5]的提示,注意获取参数时使用的是`$route`(当前路由信息对象),而跳转使用的是`$router`(路由实例)。 因此,推荐优先使用方案1或方案2,因为它们更符合路由的设计,且不需要额外的存储。 示例代码: 方案1示例: ```javascript // 跳转 this.$router.push({ path: '/about', query: { id: 123 } }) // 接收(在/about页面) this.$route.query.id // 123 ``` 方案2示例: ```javascript // 路由配置 { path: '/user/:id', name: 'User', component: User } // 跳转(使用name) this.$router.push({ name: 'User', params: { id: 123 } }) // 或者直接使用路径 this.$router.push('/user/123') // 接收(在User页面) this.$route.params.id // 123 ``` 方案3示例: ```javascript // 跳转前 sessionStorage.setItem('tempParam', JSON.stringify({ id: 123 })) this.$router.push({ path: '/user' }) // 在目标页面(User组件) created() { const param = JSON.parse(sessionStorage.getItem('tempParam')) console.log(param.id) // 123 // 使用后可以删除 sessionStorage.removeItem('tempParam') } ``` 请根据实际需求选择合适的方案。 </think>### 解决Vue路由传参页面刷新丢失问题的方案 在Vue项目中,路由传参后刷新页面导致参数丢失是常见问题,以下是五种可靠的解决方案: #### 1. **使用Query传参(推荐)** ```javascript // 跳转传参 this.$router.push({ path: '/target', query: { id: 123, name: 'vue' } // 参数显示在URL中 }) // 接收参数 this.$route.query.id // 刷新后仍可获取 ``` **原理**:参数以`?id=123&name=vue`形式附加在URL中,刷新不会丢失[^1][^2][^4]。 #### 2. **动态路由配合Params传参** ```javascript // 路由配置 { path: '/detail/:id', // 定义参数占位符 component: Detail } // 跳转传参 this.$router.push({ name: 'detail', params: { id: 456 } // 参数成为URL的一部分 }) // 接收参数 this.$route.params.id // URL显示为 /detail/456 ``` **原理**:参数直接嵌入URL路径,刷新后仍存在[^4][^5]。 #### 3. **本地存储方案** ```javascript // 跳转前存储参数 localStorage.setItem('routeParams', JSON.stringify({ data: '重要数据' })) this.$router.push('/target') // 目标页面获取 const params = JSON.parse(localStorage.getItem('routeParams')) ``` **适用场景**:复杂对象参数或敏感数据(需加密)[^3]。 #### 4. **路由属性配置传参** ```javascript // 路由配置 { path: '/page', component: Page, props: (route) => ({ id: route.query.id, name: route.query.name }) } // 组件内通过props接收 export default { props: ['id', 'name'] } ``` **优势**:实现参数与组件解耦[^5]。 #### 5. **状态管理库(Vuex/Pinia)** ```javascript // store中存储参数 store.commit('setParams', { key: 'value' }) // 目标页面获取 computed: { params() { return this.$store.state.routeParams } } ``` **最佳实践**:配合vuex-persistedstate插件实现状态持久化[^3]。 --- ### 方案对比表 | 方案 | 刷新后保留 | URL可见性 | 适用场景 | |------|------------|-----------|----------| | Query传参 | ✔️ | 可见 | 简单参数传递 | | 动态路由 | ✔️ | 可见 | RESTful风格路径 | | 本地存储 | ✔️ | 不可见 | 复杂对象/敏感数据 | | 路由属性 | ✔️ | 可选 | 组件解耦需求 | | Vuex存储 | 需插件 | 不可见 | 全局状态共享 | > **关键建议**:优先使用**Query传参**或**动态路由**这两种Vue原生方案,既符合路由设计规范,又能避免额外存储开销[^2][^4]。敏感数据建议结合本地存储加密处理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值