如何处理vue router 路由传参刷新页面参数丢失

处理Vue Router路由传参刷新页面参数丢失的攻略非常重要,下面是完整的步骤以及代码示例。

1. 使用query传参

在路由中使用query传参,是一种非常常见的方法。但是在使用query传参的时候,需要注意以下几点:

  • 如果地址栏中存在多个参数,为了避免参数重叠,参数名最好使用前缀的方式,例如"user_id=12"可以更改为"user[id]=12"或者"user_id=12&"为"user[id]=12&"。
  • 如果需要刷新页面,可以在地址栏中手动输入query参数,但是如果参数较多,这种方式显然不够优雅,因此可以在页面中使用方法$router.replace()或者$router.push()来进行跳转,并传入参数。

示例代码如下:

<template>
  <div>
    <router-link :to="{ path: '/user/detail', query: { id: user.id } }">查看详情</router-link>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        user: {
          id: 1,
          name: '小明'
        }
      }
    }
  }
</script>

在这个例子中,我们定义了一个user对象,其中包含属性id和name。我们通过在router-link标签中使用query传递id参数,来进行页面跳转。

2. 使用params传参

在路由中使用params传参,直接在路由中添加一个params属性,如下所示:

{
  path: '/user/detail/:id',
  name: 'userDetail',
  component: UserDetail
}

在这个例子中,我们在路由中定义了一个名为id的params,其中值为一个数值。在使用params传参时,我们可以通过$router.replace()或者$router.push()来进行跳转。但与query传参不同的是,在使用params传参时,我们需要注意以下几点:

  • params传参只能通过程序跳转,而不能手动输入参数。
  • 必须通过该组件的$route.params来获取参数值。

示例代码如下:

<template>
  <div>
    <router-link :to="{ path: '/user/detail/' + user.id }">查看详情</router-link>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        user: {
          id: 1,
          name: '小明'
        }
      }
    }
  },
  methods: {
    goToDetail() {
      this.$router.push({ name: 'userDetail', params: { id: this.user.id } })
    }
  }
</script>

在这个例子中,我们同样定义了一个user对象,包含id和name属性。我们通过在router-link标签中利用字符串拼接的方式传递了id参数,和使用方法$router.push()传递params参数,来进行页面跳转。

3. 处理参数丢失

上述示例中,我们通过使用query和params传参,但是在刷新页面后,参数往往会丢失,因为参数只存在于地址栏中,而并不会存在于浏览器的内存中。

我们可以利用localStorage来将参数存储在浏览器的缓存中,当页面刷新后,再将参数取回。同时为了避免页面刷新时无法传递参数,我们还需要在created钩子中对这些参数进行处理。

示例代码如下:

<template>
  <div>
    <router-link :to="{ path: '/user/detail', query: { id: user.id } }">查看详情</router-link>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        user: {
          id: 1,
          name: '小明'
        },
        queryParams: {
          id: ''
        }
      }
    },
    created() {
      if (localStorage.getItem('queryParams')) {
        this.queryParams = JSON.parse(localStorage.getItem('queryParams'))
      }
      this.queryParams.id = this.$route.query.id || this.queryParams.id
      localStorage.setItem('queryParams', JSON.stringify(this.queryParams))
    }
  }
</script>

在这个例子中,我们在data属性中添加了queryParams对象,用于存储我们需要传递的参数。在created钩子中,我们首先通过localStorage来获取之前缓存的参数值,然后使用$this.$route.query.id || this.queryParams.id来判断用户是否输入了参数。最后再将处理过后的参数存储回localStorage中。

通过这种方式,我们可以在页面刷新时,保留参数值。同时,在进行页面跳转时,我们依然使用query或者params传参的方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何处理vue router 路由传参刷新页面参数丢失 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JS中ESModule和commonjs介绍及使用区别

    JS中ESModule和CommonJS均为JS的模块化规范。ESModule是ECMAScript 6标准中新增的模块化规范,而CommonJS则是Node.js使用的模块化规范。 ESModule和CommonJS的使用区别主要体现在以下几个方面: 定义方式 ESModule使用export关键字来导出模块中的变量、函数或类,使用import关键字来导入…

    JavaScript 2023年6月11日
    00
  • javascript转换日期字符串为Date日期对象的方法

    当我们从后端服务器获得日期和时间时,通常以字符串形式接收到,如”2022-03-17 15:58:38″。如果想在前端实现对日期和时间的处理,可以使用JavaScript中的Date对象,因此我们需要将日期字符串格式转换成Date对象。下面是转换日期字符串为Date日期对象的方法: 方法一:使用new Date()构造函数 可以使用JavaScript中的D…

    JavaScript 2023年5月27日
    00
  • JS 设置Cookie 有效期 检测cookie

    下面是 JS 设置 Cookie 有效期、检测 Cookie 的完整攻略。 设置 Cookie 有效期 通过设置 Cookie 的过期时间,可以让 Cookie 在指定时间内有效,超过指定时间后自动失效。接下来,我们将通过两条示例来展示如何设置 Cookie 有效期。 示例一:使用 Expires 属性 Expires 属性是设置 Cookie 生命周期的一…

    JavaScript 2023年6月11日
    00
  • js 函数性能比较方法

    当面临选择不同实现方式时,我们必须评估其可能影响到代码性能的部分。在 JavaScript 中函数的性能是由多种因素决定的。接下来将会介绍两种比较 JS 函数性能的方法。 1. 使用性能测试工具 我们可以使用性能测试工具,如 jsbenchmark 或者 jsperf,直接进行性能测试。这些测试工具提供了一些常见的测试用例,我们可以根据自己的需要编写自己的测…

    JavaScript 2023年5月27日
    00
  • 简述Angular 5 快速入门

    下面就为您详细讲解“简述Angular 5 快速入门”的完整攻略。 Angular简介 Angular是由Google开发的一款前端框架,目前最新版本为Angular 12。它采用Typescript语言编写,提供了一套完备的前端开发解决方案,包括但不限于组件化、依赖注入、模块化等方面,同时提供便捷的工具使得开发变得更加高效,适用于构建现代Web应用程序。 …

    JavaScript 2023年6月11日
    00
  • 理解javascript函数式编程中的闭包(closure)

    理解 javascript 函数式编程中的闭包(closure)可以分为以下几个步骤: 什么是闭包? 闭包是指一个函数访问了自己定义的外部函数的作用域中的变量。简单来说,就是在一个函数内部可以访问另一个函数作用域中的变量。在 JavaScript 中,当一个函数定义在另一个函数内部时,就会形成一个闭包。 闭包的使用 保存私有变量 闭包可以用来定义私有变量。这…

    JavaScript 2023年6月10日
    00
  • JS实现的4种数字千位符格式化方法分享

    下面是JS实现的4种数字千位符格式化方法分享的详细攻略。 1. 使用toLocaleString() 可以使用toLocaleString()方法来实现数字千位符格式化。这个方法是JavaScript内置的方法,可以将数字转化为本地字符串格式。 let num = 1234567.89; console.log(num.toLocaleString()); …

    JavaScript 2023年5月28日
    00
  • js实现调用网络摄像头及常见错误处理

    JS 实现调用网络摄像头及常见错误处理 调用摄像头 在网页中调用网络摄像头是一个常见的需求,在 web 中,我们可以使用 HTML5 中的 getUserMedia() 方法来获取摄像头的视频流,再利用 Canvas 技术实现对摄像头视频的处理。使用 getUserMedia() 方法时,需要用户授权方可使用摄像头。 // 判断浏览器是否支持 if (nav…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部