详解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.Js中的$watch()方法总结

    首先,我们需要了解$watch()方法是什么以及它的作用。$watch()是Vue.js中一个重要的观察者模式,在Vue.js中可以通过$watch()方法来监视某个数据对象的变化,一旦发生变化就执行回调函数。下面详细介绍它的用法。 监听对象watch 简单的例子 我们可以通过如下代码创建一个简单的对象,并监听其中一个属性: var data = {mess…

    Vue 2023年5月29日
    00
  • vue中的dom节点和window对象

    Vue中的DOM节点和Window对象 在Vue的开发过程中,我们会频繁地涉及到操作DOM节点或者Window对象。因此,了解这两个概念是非常重要的。 DOM节点 DOM(Document Object Model)是指文档对象模型,是一种表示和操作HTML, XHTML和XML文档的标准编程接口。DOM节点是文档对象的基本组成部分,通俗地说就是HTML页面…

    Vue 2023年5月28日
    00
  • vue.js实现数据库的JSON数据输出渲染到html页面功能示例

    接下来我将详细讲解如何使用vue.js实现将数据库中的JSON数据输出渲染到HTML页面的功能。本攻略将分三个部分来讲解:第一部分介绍如何连接数据库;第二部分介绍如何将JSON数据输出;第三部分介绍如何将JSON数据渲染到HTML页面上。 第一部分:连接数据库 在vue.js中连接数据库,我们可以使用Axios。Axios是一个基于Promise的HTTP客…

    Vue 2023年5月27日
    00
  • vue各种事件监听实例(小结)

    Vue各种事件监听实例(小结) Vue.js提供了许多事件监听方式,这些方式可以帮助我们在组件之间进行数据传递、状态管理及业务逻辑触发等操作。本文将阐述Vue.js的事件监听方式和监听器的详细介绍,包括:事件、监听键盘事件、绑定原生事件、自定义事件等几个方面。 1. 事件 在Vue.js中,可以通过$emit方法向父组件或它的祖先组件派发一个事件。$emit…

    Vue 2023年5月28日
    00
  • vue 中filter的多种用法

    下面是一份关于 Vue 中 filter 的多种用法的攻略。 简介 在 Vue 中,filter 是一种非常实用的功能,它可以让我们在模板中格式化数据。例如,在展示日期时,可以使用 Date Filter 将日期格式化为固定的格式,或者在展示价格时,可以使用 Currency Filter 将价格格式化为指定的货币单位。 Vue 中 Filter 的基本用法…

    Vue 2023年5月27日
    00
  • 在vue中使用inheritAttrs实现组件的扩展性介绍

    在Vue组件的开发中,有时候我们需要在父组件中定义一些prop传递给子组件,但同时也会传递一些不需要的属性,这时候就可以使用inheritAttrs来实现组件的扩展性。下面我将为大家详细讲解“在Vue中使用inheritAttrs实现组件的扩展性介绍”的完整攻略,希望能对大家的Vue组件开发有所帮助。 inheritAttrs介绍 在Vue中,inherit…

    Vue 2023年5月29日
    00
  • vuex实现及简略解析(小结)

    Vuex实现及简略解析 Vuex是一个专为Vue.js设计的状态管理库,他采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。在大型的Vue.js应用程序中,多个组件之间共享同一状态,直接进行状态传递会比较麻烦。在这种情况下,我们可以使用Vuex。本文详细介绍了Vuex的实现和简略的解析。 Vuex简单介绍 Vuex提供…

    Vue 2023年5月28日
    00
  • 封装 axios+promise通用请求函数操作

    封装 axios+promise 通用请求函数可以提高代码的复用性和可维护性,下面详细讲解一个完整的攻略。 1. 安装 axios 使用 npm 安装 axios: npm i axios 2. 创建请求函数 import axios from ‘axios’ /** * 封装 axios+promise 通用请求函数 * @param {string} u…

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