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

题目涉及到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为什么v-for的优先级比v-if高原理解析

    Vue中v-for的优先级比v-if高是一个常见的问题,它容易引起初学者的疑惑和困惑。在这里,我将对这个问题进行详细的讲解和解答。 什么是优先级? 在Vue中,模板渲染时需要对指令、属性和表达式等进行解析和处理。而在解析和处理的过程中,不同的指令和属性会有不同的优先级,也就是说在某些情况下某些指令和属性会比其他指令和属性更先进行处理。了解不同指令和属性的优先…

    Vue 2023年5月27日
    00
  • vue更新数据却不渲染页面的解决

    下面是关于Vue更新数据却不渲染页面的解决攻略的详细讲解。 问题背景 在Vue中,一般我们通过修改组件的数据来更新页面。但有时候在修改数据后,页面却没有自动更新,这可能会给我们带来很多困扰。这种情况在Vue中被称作“数据更新但是视图不更新”。 可能出现原因 造成“数据更新但是视图不更新”的原因主要有以下几种: Vue的异步更新机制:当我们修改Vue中的数据时…

    Vue 2023年5月29日
    00
  • vue如何在多个不同服务器下访问不同地址

    在vue中访问不同服务器下的不同地址,主要是通过axios进行网络请求,下面是实现该功能的步骤和示例。 步骤 安装axios库 Vue中可以通过npm安装axios,在项目根目录下打开终端,输入以下命令安装axios: npm install axios –save 创建axios实例 使用axios创建一个实例,通过实例来设置不同服务器下的不同地址。可以…

    Vue 2023年5月29日
    00
  • vue动态合并单元格并添加小计合计功能示例

    下面是关于“vue动态合并单元格并添加小计合计功能示例”的完整攻略: 前言 在实际的开发中,我们经常会需要对表格进行合并单元格或添加小计和合计功能。Vue是一个非常实用的前端框架,本篇攻略将详细讲解如何利用Vue实现动态合并单元格以及添加小计和合计功能。 实现动态合并单元格 在Vue中实现动态合并单元格的方法,主要是利用表格中的rowspan和colspan…

    Vue 2023年5月27日
    00
  • 聊聊vue 中的v-on参数问题

    文本框架: 聊聊Vue中的v-on参数问题 什么是v-on v-on语法 不带参数的v-on 带参数的v-on v-on参数示例 示例一:点击按钮弹出提示框 示例二:在输入框中输入文字被实时监听 v-on综合示例 点击按钮改变背景色并弹出提示 总结 什么是v-on v-on 是 Vue 中的指令,用于监听 DOM 事件并触发Vue中指定的方法。在 Vue 中…

    Vue 2023年5月27日
    00
  • vue父组件调用子组件方法报错问题及解决

    这里提供一个完整的攻略来讲解“Vue父组件调用子组件方法报错问题及解决”。 问题描述 在使用Vue构建应用时,父组件调用子组件的方法时,经常会报“undefined is not a function”或其他类似的错误。 例如,在父组件的methods中调用子组件方法: <template> <div> <ChildCompon…

    Vue 2023年5月28日
    00
  • 封装一个Vue文件上传组件案例详情

    下面是封装一个Vue文件上传组件的完整攻略,包含以下步骤: 步骤一:新建组件文件 首先,在你的Vue项目中新建一个组件文件,比如命名为FileUpload.vue,并在文件头部引入Vue和相关依赖: <template> <!– 组件模板 –> </template> <script> import Vue…

    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
合作推广
合作推广
分享本页
返回顶部