前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue 项目:如何解决 router 传递 params 参数,在页面刷新时数据丢失

Vue 项目:如何解决 router 传递 params 参数,在页面刷新时数据丢失

作者头像
公众号---人生代码
发布2020-12-15 10:58:18
1.6K0
发布2020-12-15 10:58:18
举报
文章被收录于专栏:人生代码

看到以下这张图,我内心就会偷偷的笑,然后憋笑,然后破口大笑,真他妈的太形象了。

Vue 项目:如何解决 router 传递 params 参数,在页面刷新时数据丢失

情况是这样,通常我们会从一个 A 页面跳转到另一个 B 页面,如果这两个页面存在数据交互的话,就会有可能发生数据丢失的情况,来一张图,可能会更加清晰明了:

就比如我们 A 页面有一个按钮,点击按钮将数据传递给其他页面如图所示:

那接下来我们就可以新建一个 A.vue 文件代码如下:

代码语言:javascript
复制

<template>
  <button @click="toB">toB</button>
</template>
<script>
export default {
  name: 'A',
  data() {
    row: {
      name: 'A 页面'
    },
  },
  methods: {
    toB() {
      this.$router.push({
        name: 'B',
        params: {
          row:  this.row
        }
      })
    }
  }
}
</script>

接着就是 B 页面接受 A 页面的数据:

我们可以新建一个 B.vue 页面:

代码语言:javascript
复制
<template>
  <div>{{row.name}}</div>
</template>

<script>
export default {
  name: 'B',
  props: ['row'],
}
</script>

这里之所以可以使用 props 属性来接收 row,是因为我们在路由配置文件通过设置 props 为 true 来开启了路由参数解耦:

代码语言:javascript
复制
{
  path: '/B',
  name: 'B',
  props: true,
  component: import('B.vue')
}

但是如果用户突然刷新了 B 页面数据会丢失,我们一般如何解决呢?大概有三种方法:

第一种:使用 query 查询的方式传递参数:在 A 页面传递数据:

代码语言:javascript
复制

this.$router.push({
  name: 'B',
  query: {
    row: JSON.stringify(this.row)
  }
})

B 页面接受数据:

代码语言:javascript
复制
<template>
  <div>{{JSON.parse($route.query.row).name}}</div>
</template>

第二种:还是使用 params 传递参数,但是得结合 localstroage 缓存

比如 A 页面:

代码语言:javascript
复制
this.$router.push({
  name: 'B',
  params: {
    row: this.row
  }
})

B 页面接受数据:在 created 生命周期时先缓存数据,在页面销毁时删除缓存

代码语言:javascript
复制
export default {
  name: 'B',
  data() {
    return {
      row: null
    }
  },
  created() {
    let rowData = localStorage.getItem('rowData')
    if(rowData) {
      this.row = this.$route.params.row
      localStorage.setItem('rowData', JSON.stringify(this.$route.params.row))
    }
  },
  beforeDestory() {
    localStorage.removeItem('rowData')
  }
}

第三种:使用 Vuex 仓库存储数据:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CryptoCode 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Vue 项目:如何解决 router 传递 params 参数,在页面刷新时数据丢失
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档