vue中的vue-router query方式和params方式详解

yizhihongxing

Vue中的Vue-Router query方式和params方式详解

前言

在线路切换时,Vue提供了Vue-Router作为前端路由。

Vue-Router更好地配合Vue完成SPA(单页应用)的构造,相信很多使用过Vue-cli的开发者都踩过Vue-Router的坑。

本文将详细介绍Vue-Router的query方式和params方式作为前端路由传参。

区别

两种传参方式的区别,简单地说就是数据是否出现在URL路径中。

  • query方式

query方式将参数以键值对的方式拼接在URL中,是传统URL参数接收的方式,如

http://localhost:8080/home?name=jerry&age=18
  • params方式

params方式将参数直接插入到URL路径中,作为RESTful API的风格,比较直观易懂,如

http://localhost:8080/home/jerry/18

Query方式

在路由中,增加query属性即可使用query方式进行传参。如:

// router.js
{
  path: '/home',
  name: 'home',
  component: () => import(/* webpackChunkName: "home" */ '../views/Home.vue'),
  meta: {
    title: 'Home'
  },
  // query方式传参
  query: {
    name: '',
    age: 0
  }
}

在URL中传参的方式十分简单:

<!-- 路由的跳转 -->
<router-link :to="{path:'/home', query:{name:'jerry', age:18}}">Home</router-link>

<!-- 路径的跳转 -->
this.$router.push({path:'/home', query:{name:'jerry', age:18}})

跳转后URL中将会自动加入以下参数:

http://localhost:8080/home?name=jerry&age=18

接收参数的方式也很简单,在$router对象中,使用query即可:

this.$route.query.name;
// "jerry"

this.$route.query.age;
// "18"

该方法的缺点是显而易见的,比如参数过多时将会显得相当臃肿。

Params方式

在路由中,增加params属性即可使用params方式进行传参。如:

// router.js
{
  path: '/home/:name/:age',
  name: 'home',
  component: () => import(/* webpackChunkName: "home" */ '../views/Home.vue'),
  meta: {
    title: 'Home'
  },
  // params方式传参
  params: {
    name: '',
    age: 0
  }
}

在URL中传参的方式与query方式略有不同:

<!-- 路由的跳转 -->
<router-link :to="{name:'home', params:{name:'jerry', age:18}}">Home</router-link>

<!-- 路径的跳转 -->
this.$router.push({name:'home', params:{name:'jerry', age:18}})

跳转后URL中将会自动加入以下参数:

http://localhost:8080/home/jerry/18

通过$route.params.xxx,我们可以获取到跳转页面时传过来的参数,如:

this.$route.params.name;
// "jerry"

this.$route.params.age;
// "18"

params方式传递参数清晰简辑,是使用Vue-Router进行页面跳转时推荐使用的一种方式。

示例

下面是一个结合Vue的计数器示例:

<!-- App.vue -->
<template>
  <div id="app">
    <h2>计数器: {{$route.params.count}}</h2>
    <div class="btn-group">
      <!-- 可以进行历史回退 -->
      <router-link :to="'/counter/' + (parseInt($route.params.count) - 1)">-</router-link>
      <!-- 可以进行历史前进 -->
      <router-link :to="'/counter/' + (parseInt($route.params.count) + 1)">+</router-link>
    </div>
    <br>
    <button @click="changeCount">button</button>
    <router-view />
  </div>
</template>

<script>
export default {
  name: 'App',
  methods: {
    changeCount() {
      // 这样的路由会重新触发mounted方法
      this.$router.push({
        path: '/counter/' + Math.floor(Math.random()*10)
      })
    }
  }
}
</script>
// router.js
import Counter from '../views/Counter.vue'

export default new Router({
  routes: [
    {
      path: '/counter/:count',
      name: 'Counter',
      component: Counter,
      // 计数器示例中使用params传参
      params: {
        count: 0
      }
    }
  ]
})
<!-- Counter.vue -->
<template>
  <div>
    <h3>计数器组件 内容: {{$route.params.count}}</h3>
  </div>
</template>

在这个示例中,使用params方式传递计数器的变化。点击+、-时,计数器将会增加或减少,并相应跳转到目标URL。

知识扩展

通过以上的学习,我们可以发现在Vue-Router中有一个相对较为难懂的API。

即:pathToRegexp

pathToRegexp('/home/:name/:age')

这个API将返回一个正则表达式对象,能够将指定参数提取出来。如:

const regexp = pathToRegexp('/home/:name/:age');
const paramsArr = regexp.exec('/home/jerry/18');

console.log(paramsArr[1]);
// jerry

console.log(paramsArr[2]);
// 18

使用这个API,你可以在编写一些插件时方便地进行路由匹配。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue中的vue-router query方式和params方式详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 17个vue常用的数组方法总结与实例演示

    我们来详细讲解一下“17个vue常用的数组方法总结与实例演示”的完整攻略。 一、前言 在Vue中,我们经常需要操作数组。而对于数组的操作,Vue提供了许多方便快捷的方法。本文将对Vue中17个常用的数组方法进行总结和实例演示,方便大家学习和使用。 二、数组方法 1. push 向数组添加一个或多个元素,并返回新的长度。 let arr = [1,2,3]; …

    Vue 2023年5月27日
    00
  • Vue中使用 setTimeout() setInterval()函数的问题

    关于Vue中使用setTimeout()和setInterval()函数的问题,需要考虑到以下几个方面的内容: 在Vue中如何使用setTimeout()和setInterval()函数 在Vue中使用setTimeout()和setInterval()函数需要注意哪些问题 Vue中使用setTimeout()和setInterval()会涉及到的一些示例及…

    Vue 2023年5月29日
    00
  • Vue的模板语法以及实战案例

    关于 Vue 的模板语法以及实战案例的完整攻略,以下是具体的讲解: Vue 的模板语法 Vue 的模板语法采用了类似于 HTML 的语法,通过将模板中的标签和属性绑定到数据模型中实现了动态渲染页面的效果。具体来说,Vue 的模板语法主要包括以下几个方面: 支持的指令 v-if:条件语句,根据表达式的值选择是否渲染元素。 v-for:循环语句,用于渲染列表或集…

    Vue 2023年5月27日
    00
  • vue学习之Vue-Router用法实例分析

    Vue-Router 是 Vue.js 官方的路由插件,它和 Vue.js 具有相同的核心思想,即都是将 UI 和行为抽象成组件的形式,且都支持通过 props 向子组件传递数据。 Vue-Router 可以让我们通过 URL 和组件的映射关系来实现页面的跳转和切换,同时还支持路由的嵌套、命名视图、多种路由参数传递方式等功能,非常强大和灵活。 下面我们来分析…

    Vue 2023年5月27日
    00
  • vue3与elementui封装一个便捷Loading

    针对您的问题,我将为您详细讲解如何在Vue3项目中结合ElementUI进行Loading样式封装。 首先,我们需要明确Vue3与ElementUI的相关依赖。在创建Vue3项目的时候,我们需要安装Vue3及其相关依赖: npm install vue@next npm install @vue/cli@next -g 而ElementUI的安装则需要使用以…

    Vue 2023年5月27日
    00
  • vue实现一个炫酷的日历组件

    下面是详细的攻略,首先需要明确的是,实现一个炫酷的日历组件需要涉及到许多知识点,包括 Vue 组件化、CSS 动画、日期计算等等。因此,分别从这些方面来介绍实现过程。 1. Vue 组件化 首先,我们需要将日历组件拆分成多个组件,以便于管理和复用。 组件分为年、月、日期三个层级。 Year.vue: <template> <div clas…

    Vue 2023年5月28日
    00
  • Vue之组件的自定义事件详解

    Vue之组件的自定义事件详解 Vue是一个基于组件化开发的框架,组件的通信是非常重要的一部分。除了父子组件之间的通信,组件之间可以使用自定义事件来进行通信。本文将详细讲解Vue组件的自定义事件的使用方法。 什么是Vue组件的自定义事件 在Vue组件中,我们可以使用$emit()方法来触发自定义事件,然后在父组件中通过监听该自定义事件来接收数据。在一个父组件中…

    Vue 2023年5月28日
    00
  • 浅谈Vuex注入Vue生命周期的过程

    下面我将为大家详细讲解 “浅谈Vuex注入Vue生命周期的过程”的完整攻略。 什么是Vuex Vue.js 是一个轻量级的前端框架,但是当我们需要处理大量的异步请求,或者有大量的组件需要共享数据时,Vue.js 的数据响应式就会显得过于简单。这时我们就需要用到 Vuex。 Vuex 是一个专为 Vue.js 设计的应用状态管理库。它采用集中式存储管理应用的所…

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