Vue路由传参props解耦的三种方式小结

yizhihongxing

题目涉及到Vue路由传参props解耦的三种方式,以下是本文的攻略和示例:

攻略

1. 在路由定义时使用props

在定义路由时,通过将props设置为true,可以将路由参数作为组件属性传递。

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

在上述路由定义中,我们定义了一个/user/:id的路由,当匹配该路由时,Vue会自动将该路由的参数作为组件的props传递。

在组件中,我们只需要定义props接收路由参数,并直接使用即可。

// 组件定义
export default {
  props: ['id'],
  // ...
}

2. 在路由定义时使用函数

除了直接将props设置为true,还可以使用函数来进行更加灵活的传递。

const router = new VueRouter({
  routes: [
    {
      path: '/user/:id',
      component: User,
      props: (route) => ({ id: route.params.id, name: route.query.name })
    }
  ]
})

在上述路由定义中,我们使用了一个匿名函数来返回props。该函数接收一个route参数,我们可以根据该参数获取路由参数并返回带有用户信息的props对象。

// 组件定义
export default {
  props: ['id', 'name'],
  // ...
}

3. 在组件中使用$route对象

当需要在组件内部直接使用$route对象时,需要使用 $route.params 或 $route.query 来获取路由参数。

// 组件定义
export default {
  data() {
    return {
      id: this.$route.params.id,
      name: this.$route.query.name
    }
  },
  // ...
}

在上述组件定义中,我们使用了组件的data函数来初始化组件数据。我们通过访问$route.params.id 和 $route.query.name获取路由参数,并将其保存在组件的data属性中。

示例

在上述攻略中,我们通过三种方式演示了如何进行Vue路由传参props解耦。接下来,我们通过两个示例来进一步说明这三种方式的用法。

示例一:用户详情页

假设我们需要展示一个用户的详细信息,在用户列表页中点击某个用户,即可跳转到用户详情页,并且在用户详情页中可以展示改用户的完整信息。

路由定义

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

组件定义

<template>
  <div>
    <p>用户名: {{ username }}</p>
    <p>年龄: {{ age }}</p>
    <p>性别: {{ gender }}</p>
  </div>
</template>

<script>
export default {
  props: ['id'],
  data() {
    return {
      username: '',
      age: 0,
      gender: ''
    }
  },
  mounted() {
    // TODO: 根据用户id获取详细信息,填充data中的数据
  }
}
</script>

在上述示例中,我们定义了一个/user/:id的路由,同时将props设置为true。在组件中,我们定义了一个props接收路由参数,并且使用mounted函数来获取用户详细信息,将其填充到组件的data属性中,实现了用户详情页的展示。

示例二:搜索结果展示页

假设我们需要实现一个搜索结果展示页,可以通过关键字搜索相关的文章,并且点击某篇文章可以跳转到该文章详情页。

路由定义

const router = new VueRouter({
  routes: [
    {
      path: '/search',
      component: SearchResult,
      props: (route) => ({ keyword: route.query.keyword })
    },
    {
      path: '/article/:id',
      component: ArticleDetail,
      props: true
    }
  ]
})

在上述示例中,我们定义了一个/search的路由用于搜索结果展示页,同时使用了一个函数来返回props,props中包含了搜索关键字。

我们还定义了一个 /article/:id的路由用于文章详情页,同样地,我们将props设置为true。

组件定义

<template>
  <div>
    <h2>{{ keyword }}的搜索结果</h2>
    <ul>
      <li v-for="article in articles" :key="article.id">
        <router-link :to="{ path: '/article/' + article.id }">
          {{ article.title }}
        </router-link>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  props: ['keyword'],
  data() {
    return {
      articles: []
    }
  },
  mounted() {
    // TODO: 根据关键字搜索相关文章
    // 将搜索结果存储在this.articles中
  }
}
</script>

在上述示例中,我们定义了一个搜索结果展示页组件,在组件中定义了props接收路由参数keyword,并且使用mounted函数来进行搜索操作。

在展示搜索结果时,我们使用v-for遍历this.articles数组,并通过router-link来实现点击文章标题到文章详情页的跳转。

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

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

相关文章

  • vue中遇到的坑之变化检测问题(数组相关)

    1. 问题背景 在Vue中,当数组相关数据更新时,会对应的更新DOM元素,但是在更新数组时,我们需要注意到一些坑点。 2. 变化检测方式 Vue采用的是基于 JavaScript 对象的变化检测机制,在更新一个对象时,Vue 会遍历它的每一个属性,并且使用 Object.defineProperty 把这个属性转为 getter 和 setter。 3. 数…

    Vue 2023年5月27日
    00
  • webpack项目调试以及独立打包配置文件的方法

    下面是关于“webpack项目调试以及独立打包配置文件的方法”的完整攻略: 项目调试 方式一:使用devtool webpack的devtool选项用来配置source map的生成方式。设置这个选项可以很方便地进行调试。 常用的有以下几种: source-map:一种映射方式,会生成一个 .map 文件,会减慢打包速度。 cheap-module-sour…

    Vue 2023年5月28日
    00
  • Springboot Vue可配置调度任务实现示例详解

    下面我将为您详细讲解“Springboot Vue可配置调度任务实现示例详解”的完整攻略。 简介 本攻略将介绍如何使用Springboot和Vue实现可配置调度任务,主要涵盖以下内容: 何为可配置调度任务 实现可配置调度任务的技术选型 实现步骤和示例说明 什么是可配置调度任务 可配置调度任务是指可以根据用户需求动态添加、修改、删除的定时任务,而不需要每次都手…

    Vue 2023年5月28日
    00
  • vue项目中引入vue-datepicker插件的详解

    引入 vue-datepicker 插件,主要需要以下几个步骤: 1. 安装 vue-datepicker 插件 使用 npm 或 yarn 安装该插件: npm install vue-datepicker –save # 或 yarn add vue-datepicker 2. 在 main.js 中注册插件 在 main.js 文件中添加如下代码: …

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

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

    Vue 2023年5月28日
    00
  • vue.js中Vue-router 2.0基础实践教程

    下面是“vue.js中Vue-router 2.0基础实践教程”的完整攻略: 什么是Vue-router? Vue-router是Vue.js官方的路由管理器。它与Vue.js深度集成,可以非常方便地实现单页应用中的路由跳转、参数传递、路由拦截等功能。Vue-router的核心概念包括路由、参数、钩子、子路由等。 安装和使用Vue-router 安装Vue-…

    Vue 2023年5月28日
    00
  • Vue脚手架搭建及创建Vue项目流程的详细教程

    下面是关于Vue脚手架搭建及创建Vue项目的详细教程攻略: 1. 什么是Vue脚手架? Vue脚手架是Vue.js的官方脚手架工具,提供了快速搭建Vue.js开发环境的方法,包含了常用的插件和构建工具,方便开发者快速地进行Vue项目的开发与调试。 2. Vue脚手架搭建 2.1 环境准备 Vue脚手架需要依赖Node.js和npm包管理器,因此需要先安装No…

    Vue 2023年5月27日
    00
  • vue3 typescript封装axios过程示例

    关于“vue3 typescript封装axios过程示例”的完整攻略,以下是步骤: 一、安装依赖 在Vue3项目中,先安装vue3,使用命令:npm install vue@next –save 安装typescript,使用命令:npm install typescript –save-dev 安装axios,使用命令:npm install axi…

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