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

yizhihongxing

详解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日

相关文章

  • vue3+vite+ts使用monaco-editor编辑器的简单步骤

    使用vue3+vite+ts并集成monaco-editor编辑器需要经过以下步骤: 步骤一:创建vue3项目 使用vue-cli可以创建一个基础的vue3项目,安装vue-cli: npm install -g @vue/cli 然后执行以下命令创建vue3项目: vue create my-app –preset vite/vue 其中my-app是项…

    Vue 2023年5月28日
    00
  • Vue3通过ref操作Dom元素及hooks的使用方法

    现在我来为你详细讲解“Vue3通过ref操作Dom元素及hooks的使用方法”的完整攻略。 1. 关于Vue3的Ref 在Vue3中,ref函数用于创建一个响应式的对象,该对象的值可以跨越组件之间进行传递和更新。它的语法如下: const foo = ref(initialValue) 其中,initialValue可以是任何JavaScript类型的初始值…

    Vue 2023年5月28日
    00
  • vue项目中如何通过cdn引入资源并配置详解

    当我们在使用Vue来开发项目时,我们可能需要引入一些第三方的依赖库或者一些静态资源文件,这些资源可能已经被其他网站或者CDN提供商存储并且公开的提供,因此我们可以考虑通过CDN来引入这些资源文件,这样可以提高访问效率,加快网页加载速度。 以下是引入jQuery和Bootstrap的CDN资源的两个例子。 引入jQuery的CDN资源 首先在我们的页面中引入j…

    Vue 2023年5月28日
    00
  • 使用Mockjs模拟接口实现增删改查、分页及多条件查询

    使用Mockjs模拟接口实现增删改查、分页及多条件查询可以分为以下步骤: 安装Mock.js库 使用npm安装Mock.js库:npm install mockjs –save-dev 创建Mock接口数据 在项目中创建一个mock文件夹,其中的api.js文件用于存放Mock接口数据,具体代码如下: import Mock from ‘mockjs’ c…

    Vue 2023年5月27日
    00
  • 使用react context 实现vue插槽slot功能

    使用React Context 来实现类似于Vue 框架中的插槽 Slot 的功能主要有两个步骤: 创建一个 Context 并提供默认值 在需要使用的子组件中使用该 Context 的 Provider,然后在子组件中使用该 Context 的 Consumer 来渲染相应的内容。 具体实现过程如下: 创建 Context 在需要使用插槽 Slot 的父组…

    Vue 2023年5月28日
    00
  • vue项目无法删除的问题及解决

    当我们在使用Vue开发项目时,有时候会出现Vue项目无法删除的情况。这种情况往往是因为项目中的一些文件或者进程仍在运行,阻止了我们删除整个项目。接下来,我将为大家提供一份完整的攻略,帮助大家解决这一问题。 问题描述 当我们使用命令行删除Vue项目时,可能会出现以下错误提示: rmdir “xxx:被占用的文件夹无法删除”。 这个错误提示通常是因为该文件夹正在…

    Vue 2023年5月29日
    00
  • Vue重要修饰符.sync对比v-model的区别及使用详解

    我们来详细讲解一下“Vue重要修饰符.sync对比v-model的区别及使用详解”的完整攻略。 什么是.sync修饰符? .sync是Vue.js中的一个重要修饰符,它是v-bind的一个语法糖。.sync可以在子组件中使用父组件的数据,并实现双向绑定,自动更新父组件中的数据。 通常情况下,父组件将数据通过props传递给子组件,但是这样只能实现单向数据流,…

    Vue 2023年5月29日
    00
  • vue cli 全面解析

    Vue CLI 全面解析 什么是Vue CLI Vue CLI是一个基于Vue.js进行快速开发的标准化工具,提供了快速生成Vue项目的能力,对于开发和构建大型Vue.js应用非常有帮助。它包含了一套插件和预设,可以让你在几分钟内即可创建Vue项目,配置工具链。 安装Vue CLI 要安装Vue CLI,我们首先需要安装Node.js。我们可以去Node.j…

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