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

yizhihongxing

处理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日

相关文章

  • Javascript的表单与验证-非空验证

    现在我来为您讲解一下“Javascript的表单与验证-非空验证”的完整攻略。 1. 标题 首先,我们需要为这篇攻略添加一个合适的标题,以便读者能够清楚地了解这篇攻略的主题。标题可以设为“Javascript表单验证-非空验证”。 2. 简介 在正式开始讲解“Javascript表单验证-非空验证”之前,我们先来简单介绍一下表单验证的概念及其重要性。 表单验…

    JavaScript 2023年6月10日
    00
  • Vue Router中Matcher的初始化流程

    Vue Router的Matcher是用来匹配路径与路由配置的。该匹配器会在Vue Router的实例化过程中被初始化。Matcher的初始化流程如下: 创建空的路由映射表 在Vue Router实例化时,会创建一个空的路由映射表,用于存储路径与路由配置之间的映射关系。该映射表是一个由路径作为键,路由配置作为值的对象。 示例: const routes = …

    JavaScript 2023年6月11日
    00
  • Javascript学习笔记之数组的遍历和 length 属性

    Javascript学习笔记之数组的遍历和 length 属性 介绍 在 Javascript 中,数组是一种常见的数据结构。数组是一组按顺序排列的值的集合,每个值都可以通过一个索引进行访问。数组可以存储各种类型的值,包括数字、字符串、对象和函数等。 数组的 length 属性用于获取数组的长度,即其中元素的数量。 在本文中,我将介绍如何遍历数组以及如何使用…

    JavaScript 2023年5月27日
    00
  • javascript实现在线客服效果

    实现在线客服效果可以使用Javascript技术和一些其他技术(如HTML和CSS)。以下是一些实现该效果的步骤: 1.准备工作 首先,我们需要编写一个HTML文件,包含一个聊天窗口和一个表单,用于发送消息和接收用户信息。该表单需要具有提交按钮,并且可以向服务器发送消息并获取响应。 2.创建服务器端脚本 使用Node.js等服务器端技术创建脚本来处理客户端发…

    JavaScript 2023年6月10日
    00
  • js传参数受特殊字符影响错误的解决方法

    当使用JavaScript进行参数传递的时候,如果传递的参数中包含特殊字符,可能会出现错误。这种错误的解决方案可以通过对参数进行转义处理。 1. encodeURI() 和 decodeURI() 函数 使用encodeURI() 和 decodeURI() 函数可以对参数进行编码和解码。这两个函数都是全局对象的方法。 encodeURI()方法将一个字符串…

    JavaScript 2023年5月19日
    00
  • 浅谈js闭包理解

    浅谈JS闭包理解 什么是闭包 在Javascript中,闭包是可以访问外部函数作用域内变量的函数。通俗的讲,闭包就是将函数内的变量保存起来,以便在后续的函数中使用的一种机制。 闭包的定义 闭包由两部分组成:函数(或者函数表达式)和一个保存该函数作用域的对象。 例如: function outerFunction() { let outerVar = 5; f…

    JavaScript 2023年6月10日
    00
  • 详解js常用分割取字符串的方法

    详解js常用分割取字符串的方法 在JavaScript中,我们常常需要对字符串进行分割取值的操作。以下是几种常用的字符串分割取值方法。 1. 通过split方法进行分割 split()方法可以将一个字符串分割成一个字符串数组,使用时需要传入一个分割符,该符号表示将字符串以该符号为分界点进行分割。 例如: const str = "apple,ban…

    JavaScript 2023年5月28日
    00
  • JavaScript函数调用经典实例代码

    JavaScript函数调用经典实例代码攻略: 一、函数调用方式 JavaScript 中函数的调用分为四种方式: 函数调用 直接调用函数。 javascript function fn1() { console.log(“fn1 被调用了”); } fn1(); 方法调用 将函数作为对象的一个属性,通过该对象调用函数。 javascript var obj…

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