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项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 Vue.js
Vue与React的区别和优势对比
Dec 18 Vue.js
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
Dec 19 Vue.js
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
vue 动态创建组件的两种方法
Dec 31 Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
vue backtop组件的实现完整代码
Apr 07 Vue.js
vue如何批量引入组件、注册和使用详解
May 12 Vue.js
Vue+Flask实现图片传输功能
Apr 01 Vue.js
vue动态绑定style样式
Apr 20 Vue.js
使用vuex-persistedstate本地存储vuex
Apr 29 Vue.js
el-table-column 内容不自动换行的解决方法
Aug 14 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
社区(php&amp;&amp;mysql)五
2006/10/09 PHP
ezSQL PHP数据库操作类库
2010/05/16 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
2013/12/16 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
python类继承用法实例分析
2015/05/27 Python
Python实现的彩票机选器实例
2015/06/17 Python
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
审计主管岗位职责
2014/01/31 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
信用卡工资证明范本
2015/06/19 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
小学班级口号大全
2015/12/25 职场文书
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS