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组件中节流函数的失效的原因和解决方法
Dec 02 Vue.js
如何实现vue的tree组件
Dec 03 Vue.js
vue 实现图片懒加载功能
Dec 31 Vue.js
vue form表单post请求结合Servlet实现文件上传功能
Jan 22 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
vue3中的组件间通信
Mar 31 Vue.js
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
May 18 Vue.js
vue+springboot实现登录验证码
May 27 Vue.js
解决vue $http的get和post请求跨域问题
Jun 07 Vue.js
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
vue+iview实现手机号分段输入框
Mar 25 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
全国FM电台频率大全 - 1 北京市
2020/03/11 无线电
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
jquery实现拖动效果
2016/08/10 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
实例详解带参数的 npm script
2019/05/28 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
Python 搭建Web站点之Web服务器网关接口
2016/11/06 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
Python标准库shutil用法实例详解
2018/08/13 Python
用pycharm开发django项目示例代码
2018/10/24 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
2015年幼儿园毕业感言
2014/02/12 职场文书
党员干部公开承诺书
2014/03/26 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
亮剑精神观后感
2015/06/05 职场文书
治庸问责工作总结
2015/08/11 职场文书
Django 如何实现文件上传下载
2021/04/08 Python
Python实现对齐打印 format函数的用法
2022/04/28 Python