详解Vue 路由组件传参的 8 种方式

详解Vue 路由组件传参的 8 种方式

传参概述

在Vue中,路由传参是非常常见的需求,下面是详解Vue路由组件传参的8种方式。

方式一:params

通过动态路径参数进行传参,使用$route.params获取参数。

const router = new VueRouter({
  routes: [
    {
      path: '/user/:id',
      component: User
    }
  ]
})

// 通过路由传参
router.push({ path: '/user/123' })

// 在 User 组件中获取参数
console.log(this.$route.params.id) // '123'

方式二:query

通过查询参数进行传参,使用$route.query获取参数。

const router = new VueRouter({
  routes: [
    {
      path: '/user',
      component: User
    }
  ]
})

// 通过路由传参
router.push({ path: '/user', query: { id: '123' } })

// 在 User 组件中获取参数
console.log(this.$route.query.id) // '123'

方式三:props

通过props进行传参,需要设置props: true,并使用props属性获取参数。

const router = new VueRouter({
  routes: [
    {
      path: '/user/:id',
      component: User,
      props: true
    }
  ]
})

// 在 User 组件中获取参数
props: {
  id: {
    type: String,
    required: true
  }
}

方式四:元信息meta

通过路由元信息meta进行传参,在matched数组中获取参数。

const router = new VueRouter({
  routes: [
    {
      path: '/user/:id',
      component: User,
      meta: { id: '123' }
    }
  ]
})

// 在 User 组件中获取参数
console.log(this.$route.matched[0].meta.id) // '123'

方式五:url search参数

通过url search参数进行传参,在location.search中获取参数。

// 通过路由传参
router.push({ path: '/user?id=123' })

// 在 User 组件中获取参数
console.log(new URLSearchParams(this.$route.fullPath.split('?')[1]).get('id')) // '123'

方式六:全局状态管理器Vuex

通过Vuex进行传参,在this.$store.state.xxx中获取参数。

const store = new Vuex.Store({
  state: {
    id: '123'
  }
})

// 在 User 组件中获取参数
console.log(this.$store.state.id) // '123'

方式七:localStorage

通过localStorage进行传参,在localStorage.getItem('xxx')中获取参数。

// 通过路由传参
localStorage.setItem('id', '123')
router.push({ path: '/user' })

// 在 User 组件中获取参数
console.log(localStorage.getItem('id')) // '123'

方式八:sessionStorage

通过sessionStorage进行传参,在sessionStorage.getItem('xxx')中获取参数。

// 通过路由传参
sessionStorage.setItem('id', '123')
router.push({ path: '/user' })

// 在 User 组件中获取参数
console.log(sessionStorage.getItem('id')) // '123'

示例说明

下面是一个使用params方式传参的示例,用户点击列表时进入详情页面,详情页需要根据路由参数获取对应数据进行展示。

// 路由配置
const router = new VueRouter({
  routes: [
    {
      path: '/users/:id',
      component: UserDetail
    }
  ]
})

// 在用户列表组件中跳转传参
this.$router.push({ path: `/users/${user.id}` })

// 在用户详情组件中获取参数并进行数据展示
created () {
  // 获取路由参数
  const userId = this.$route.params.id
  // 根据userId获取对应的用户数据
  const user = getUserById(userId)
  // 展示数据
  this.user = user
}

下面是一个使用Vuex方式传参的示例,用户输入关键词后点击搜索按钮,搜索结果需要展示在列表页面上。

// Vuex配置
const store = new Vuex.Store({
  state: {
    keyword: ''
  },
  mutations: {
    setKeyword (state, keyword) {
      state.keyword = keyword
    }
  }
})

// 搜索组件代码片段
<template>
  <div>
    <input type="text" v-model="keyword">
    <button @click="search">搜索</button>
  </div>
</template>

<script>
export default {
  data () {
    return {
      keyword: ''
    }
  },
  methods: {
    search () {
      // 更新Vuex状态
      this.$store.commit('setKeyword', this.keyword)
      // 跳转路由
      this.$router.push('/list')
    }
  }
}
</script>

// 列表组件代码片段
<template>
  <ul>
    <li v-for="item in items" :key="item.id">{{ item.title }}</li>
  </ul>
</template>

<script>
export default {
  computed: {
    keyword () {
      return this.$store.state.keyword
    },
    items () {
      // 根据keyword获取列表数据
      return getItemsByKeyword(this.keyword)
    }
  }
}
</script>

以上就是详解Vue路由组件传参的8种方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Vue 路由组件传参的 8 种方式 - Python技术站

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

相关文章

  • Vue + Axios 请求接口方法与传参方式详解

    下面是详细讲解 “Vue + Axios 请求接口方法与传参方式详解” 的完整攻略。 简介 Vue 是一个渐进式框架,许多 web 应用程序使用它来构建 UI。Axios 是一个基于 promise 的 HTTP 库,可以用于进行数据请求。在 Vue 中,我们可以结合 Axios 在应用程序中轻松地发送数据请求。 本攻略将为您提供如何使用 Vue + Axi…

    Vue 2023年5月27日
    00
  • vue祖孙组件之间的数据传递案例

    这里给你讲解一下“Vue祖孙组件之间的数据传递案例”的完整攻略。 一、介绍 Vue提供了一种祖孙组件之间进行数据传递的方式。我们可以通过在父组件中提供一个数据属性,然后在子组件中使用prop接收这个值,来实现祖孙组件之间的数据传递。 二、示例 接下来,我们通过示例来演示祖孙组件之间的数据传递。假设有一个简单的应用程序,其中包含一个具有输入框的祖先组件和一个具…

    Vue 2023年5月28日
    00
  • vue中设置滚动条方式

    我来给您详细讲解一下vue中设置滚动条方式的完整攻略,以下是具体步骤: 1. 引入第三方滚动条库 Vue原生并不提供滚动条相关的API,因此我们需要借助第三方库来添加滚动条组件。这里我推荐使用perfect-scrollbar,这是一个轻量级的滚动条插件,使用简单。 我们可以在项目中使用npm安装该插件: npm install perfect-scroll…

    Vue 2023年5月29日
    00
  • Vue中通过minio上传文件的详细步骤

    下面是Vue中通过Minio上传文件的详细步骤: 1. 安装minio-js 首先,需要安装minio-js,可以使用npm进行安装: npm install minio-js 2. 创建minio实例 在Vue组件中引入minio-js,并创建minio实例,示例代码如下: import Minio from ‘minio-js’ const minioC…

    Vue 2023年5月28日
    00
  • Vue.js状态管理之Pinia与Vuex详解

    Vue.js状态管理之Pinia与Vuex详解 状态管理是什么 在一些大型 Web 应用中,数据的流转较为复杂,需要对数据的读写进行控制和管理,以保证应用的数据一致性和可靠性,而状态管理就是一种用于控制和管理应用数据的方法。 在 Vue.js 中,状态管理可以使用两种比较流行的库实现:Vuex 和 Pinia。 Vuex 简介 Vuex 是一个专门为 Vue…

    Vue 2023年5月27日
    00
  • vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)

    十分感谢您的提问。下面是我对”vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)”的解答。 首先,我们需要了解一下Drag and Drop API的基本用法。该API是在HTML5中引入的,并允许用户将元素拖放到指定的目标位置上。接下来,我们将根据这一概念给出完整的攻略。 1. 实现基本的拖放功能 下面是一个基本的HTML结构,它包含了两个d…

    Vue 2023年5月28日
    00
  • vue项目强制清除页面缓存的例子

    要强制清除页面缓存,可以通过添加版本号或者随机字符串的方式来实现。 添加版本号 在vue.config.js文件中的output选项中添加chunkFilename配置项来配置生成的chunk文件名: output: { filename: "js/[name].[hash:8].js", chunkFilename: "js/…

    Vue 2023年5月28日
    00
  • Vue实现导出excel表格功能

    下面是Vue实现导出Excel表格的完整攻略: 准备工作 引入xlsx库,可以通过以下命令安装 npm install xlsx –save。 在Vue项目中新建一个组件用来放置导出Excel的按钮。 示例代码 <template> <div> <button @click="generateExcel()&quot…

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