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

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日

相关文章

  • Vue全家桶实践项目总结(推荐)

    Vue全家桶实践项目总结(推荐) 介绍 本文主要分享一些Vue全家桶实践项目的经验总结,包括Vue、Vue-Router、Vuex、Axios等相关技术的使用。 搭建项目 首先,我们需要通过以下命令来安装Vue脚手架: npm install -g vue-cli 创建一个新的Vue项目: vue init webpack my-project cd my-…

    Vue 2023年5月27日
    00
  • 深入理解Vue响应式原理及其实现方式

    深入理解Vue响应式原理及其实现方式 什么是Vue响应式原理 Vue.js是一种用于构建交互式Web界面的渐进式JavaScript框架,可以帮助开发者更高效地构建Web应用。Vue的响应式原理是Vue最重要的特性之一,它允许开发者通过声明式数据绑定来管理应用的状态,并自动跟踪数据之间的依赖关系和更新视图,提高了开发效率并提供更好的用户体验。 在Vue的响应…

    Vue 2023年5月27日
    00
  • 带你熟练掌握Vue3之Pinia状态管理

    带你熟练掌握Vue3之Pinia状态管理攻略 什么是Pinia? Pinia 是一个由 Eduardo San Martin Morote (Vue.js 核心团队成员)开发的 Vue.js3 状态管理库。 相较于 Vuex,在语法上有了很多的优化和改进,个人认为更易于学习使用,这里我们就来看一下如何使用它。 安装 在使用 Pinia 之前,需要确保先安装 …

    Vue 2023年5月27日
    00
  • Vue.Js及Java实现文件分片上传代码实例

    我来为你详细讲解Vue.js及Java实现文件分片上传代码实例的完整攻略。 背景知识 在介绍代码实现前,先了解一下文件分片上传的概念。文件分片上传是指将文件划分为多个小块,通过异步上传的方式逐一上传,直到整个文件全部上传完毕。这种方式可以有效地提高大文件的上传速度和稳定性。 Vue.js实现文件分片上传 前端代码实现 首先,在Vue.js中使用axios库发…

    Vue 2023年5月28日
    00
  • vue 之 css module的使用方法

    我来给你详细讲解一下“vue之CSS Module的使用方法”的完整攻略。 1. 什么是CSS Module CSS Module是CSS的一种模块化方案,与其它CSS的模块化方案如Sass、Less等不同的是,它是由JavaScript模块化方案驱动的,而不是依赖于编译器或预处理器。CSS Module可以帮助我们解决CSS全局污染的问题,让我们的CSS样…

    Vue 2023年5月28日
    00
  • Vue-cli Eslint在vscode里代码自动格式化的方法

    第一步:安装必要的工具和插件 首先,我们需要安装Vue-cli和Vscode这两个软件,Vue-cli用于创建Vue项目,Vscode用于编写和调试代码。同时,我们还需要安装Vscode的插件“ESLint”和“Prettier – Code formatter”,用于代码格式化和检测。 安装Vue-cli命令行工具,在终端中输入以下命令: npm inst…

    Vue 2023年5月28日
    00
  • Vue3父子组件传参有关sync修饰符的用法详解

    下面是详细讲解“Vue3父子组件传参有关sync修饰符的用法详解”的完整攻略。 什么是sync修饰符? 在Vue3中,我们可以使用.sync修饰符将父组件的数据属性与子组件的属性进行双向绑定。例如,我们有一个父组件和一个子组件: <!– 父组件 –> <template> <div> <h2>{{ mess…

    Vue 2023年5月28日
    00
  • vue中v-for 循环对象中的属性

    当你需要在Vue中使用v-for指令循环一个列表时,有时可能需要访问遍历对象中的属性。以下是一个基本的示例: <ul> <li v-for="item in items">{{ item }}</li> </ul> 在上面的示例中,我们访问了items列表中的每个元素,并将它们渲染为一个li…

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