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-router中hash模式与history模式的区别详解
Dec 15 Vue.js
Vue与React的区别和优势对比
Dec 18 Vue.js
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
vue导入.md文件的步骤(markdown转HTML)
Dec 31 Vue.js
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
Feb 26 Vue.js
Vue和Flask通信的实现
May 19 Vue.js
vue+spring boot实现校验码功能
May 27 Vue.js
vue+element ui实现锚点定位
Jun 29 Vue.js
vue 实现弹窗关闭后刷新效果
Apr 08 Vue.js
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
vue 自定义的组件绑定点击事件
Apr 21 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中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
php的memcached客户端memcached
2011/06/14 PHP
php实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
PHP 与 UTF-8 的最佳实践详细介绍
2017/01/04 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
2020/04/14 PHP
javascript 禁止复制网页
2009/06/11 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
子页向父页传值示例
2013/11/27 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
让Vue也可以使用Redux的方法
2018/05/23 Javascript
element-ui中select组件绑定值改变,触发change事件方法
2018/08/24 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
vue中音频wavesurfer.js的使用方法
2020/02/20 Vue.js
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
python发送arp欺骗攻击代码分析
2014/01/16 Python
python实现socket客户端和服务端简单示例
2014/02/24 Python
python利用dir函数查看类中所有成员函数示例代码
2017/09/08 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
Tensorflow 实现修改张量特定元素的值方法
2018/07/30 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
2013/08/11 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
西安夏日科技有限公司Java笔试题
2013/01/11 面试题
历史学专业毕业生求职信
2013/09/27 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers
Java中的Kotlin 内部类原理
2022/06/16 Java/Android