Vue router传递参数并解决刷新页面参数丢失问题


Posted in Vue.js onDecember 02, 2020

Vue Router 传参方式:

1. this.$router.push({ name: '模块名称', params: { // 各参数 } })

router.js:

export default new Router({
 routes: [
  {
   path: '/paramsPassingByRouter',
   component: ParamsPassingByRouter,
   children: [
    {
     path: 'paramsMode',
     name: 'paramsMode',
     component: ParamsMode
    }
   ]
  }
 ]
})

ParamsPassingByRouter.vue:

<!-- html -->
<button @click="paramsMode(testData)">params传参</button>

<!-- js -->
<script>
export default {
 data () {
  return {
   testData: {
    id: '20180101',
    name: '张三',
    aka: 'z3',
    age: '18'
   }
  }
 },
 methods: {
  paramsMode (data) {
   this.$router.push({
    name: 'paramsMode',
    params: data
   })
  }
 }
}
</script>

ParamsMode.vue:

<!-- html -->
<div class="params-mode">{{ testData }}</div>

<!-- js -->
<script>
export default {
 data () {
  return {
   testData: {}
  }
 },
 created () {
  this.testData = this.$route.params
 }
}
</script>

效果:
url:http://localhost:8081/#/paramsPassingByRouter/paramsMode
页面显示:{"id":"20180101","name":"张三","aka":"z3","age":"18"}

但是刷新页面后,数据会丢失,显示:{}。

2. this.$router.push({ name: '模块名称', query: { // 各参数 } })

router.js:

export default new Router({
 routes: [
  {
   path: '/paramsPassingByRouter',
   component: ParamsPassingByRouter,
   children: [
    {
     path: 'queryMode',
     name: 'queryMode',
     component: QueryMode
    }
   ]
  }
 ]
})

ParamsPassingByRouter.vue:

<!-- html -->
<button @click="queryMode(testData)">query传参</button>

<!-- js -->
<script>
export default {
 data () {
  return {
   testData: {
    id: '20180101',
    name: '张三',
    aka: 'z3',
    age: '18'
   }
  }
 },
 methods: {
  queryMode (data) {
   this.$router.push({
    name: 'paramsMode',
    query: data
   })
  }
 }
}
</script>

QueryMode.vue:

<!-- html -->
<div class="query-mode">{{ testData }}</div>

<!-- js -->
<script>
export default {
 data () {
  return {
   testData: {}
  }
 },
 created () {
  this.testData = this.$route.query
 }
}
</script>

效果:
url:http://localhost:8081/#/paramsPassingByRouter/queryMode?id=20180101&name=%E5%BC%A0%E4%B8%89&aka=z3&age=18
页面显示:{"id":"20180101","name":"张三","aka":"z3","age":"18"}

刷新页面后,数据不会丢失。

解决刷新页面数据丢失的方案:

使用 this.$router.push({ name: '模块名称', query: { // 各参数 } }) 方式传参。

缺点:参数值都拼接在 url 上,url 会很长,同时都可被看到。

this.$router.push({ name: '模块名称', params: { // 各参数 } }) 路由文件设置的时候把参数拼到 url 里。

url:http://localhost:8081/#/paramsPassingByRouter/paramsMode/20180101/%E5%BC%A0%E4%B8%89/z3/18
缺点:同上。

1 和 2 结合使用:this.$router.push({ name: '模块名称', params: { // 各参数 }, query: { // 各参数 } })。

老老实实的用 localStorage 存储。

url: http://localhost:8081/#/paramsPassingByRouter/paramsMode/z3
可以与 params 和 query 方式配合使用,可以暴露的参数显示在 url 上,同时刷新参数也不会丢失。
销毁页面的时候把 localStorage 存储的内容清除。

// router.js
{
 path: 'paramsMode/:aka',
 name: 'paramsMode',
 component: ParamsMode
}

<!-- ParamsMode.vue 修改 -->
<script>
export default {
 data () {
  return {
   testData: {}
  }
 },
 created () {
  const tempData = localStorage.getItem('tempData')
  if (tempData) {
   this.testData = JSON.parse(tempData)
  } else {
   this.testData = this.$route.params

   localStorage.setItem('tempData', JSON.stringify(this.$route.params))
  }
 },
 beforeDestroy () {
  localStorage.removeItem('tempData')
 }
}
</script>

到此这篇关于Vue router传递参数并解决刷新页面参数丢失问题的文章就介绍到这了,更多相关Vue router传递参数丢失内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
Vue项目利用axios请求接口下载excel
Nov 17 Vue.js
vue实现两个区域滚动条同步滚动
Dec 13 Vue.js
8个非常实用的Vue自定义指令
Dec 15 Vue.js
Vue.extend 登录注册模态框的实现
Dec 29 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
vue组件是如何解析及渲染的?
Jan 13 Vue.js
如何管理Vue中的缓存页面
Feb 06 Vue.js
如何在 Vue 中使用 JSX
Feb 14 Vue.js
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
vue css 相对路径导入问题级踩坑记录
Jun 05 Vue.js
Vue Mint UI mt-swipe的使用方式
Jun 05 Vue.js
详解Vue3 Teleport 的实践及原理
Dec 02 #Vue.js
vue $router和$route的区别详解
Dec 02 #Vue.js
基于vue项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 #Vue.js
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 #Vue.js
vue组件中节流函数的失效的原因和解决方法
Dec 02 #Vue.js
Vue3+elementui plus创建项目的方法
Dec 01 #Vue.js
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
Dec 01 #Vue.js
You might like
模仿OSO的论坛(二)
2006/10/09 PHP
MySQL授权问题总结
2007/05/06 PHP
PHP session有效期问题
2009/04/26 PHP
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
2009/09/30 PHP
PHP文件读写操作之文件读取方法详解
2011/01/13 PHP
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
PHP中exec与system用法区别分析
2014/09/22 PHP
php实现删除空目录的方法
2015/03/16 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
JSON 编辑器实现代码
2009/12/06 Javascript
js 居中漂浮广告
2010/03/21 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
原生js和jquery分别实现横向导航菜单效果
2016/05/13 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
基于JavaScript实现的顺序查找算法示例
2017/04/14 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
windows下安装Python和pip终极图文教程
2017/03/05 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
Python pandas如何向excel添加数据
2020/05/22 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
耐克亚太地区:Nike APAC
2019/12/07 全球购物
应聘销售主管的求职信
2014/04/26 职场文书
火锅店的活动方案
2014/08/15 职场文书
护士2015年终工作总结
2015/04/29 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
Java常用函数式接口总结
2021/06/29 Java/Android