Vue组件通信传递数据的三种方式

Vue组件通信中,常常需要进行数据传递,Vue提供了三种方式:props、$emit、$on/$once。

1. props

props是父组件向子组件传递数据的一种方式,可以传递任何类型的数据。

父组件定义:

<template>
  <child
    :title="title"
    :list="list"
    :num="num"
  />
</template>

<script>
import Child from './Child.vue'

export default {
  components: {
    Child
  },
  data() {
    return {
      title: '父标题',
      list: ['a', 'b', 'c'],
      num: 123
    }
  }
}
</script>

子组件定义:

<template>
  <div>
    <h3>{{ title }}</h3>
    <ul>
      <li v-for="item in list" :key="item">{{ item }}</li>
    </ul>
    <span>{{ num }}</span>
  </div>
</template>

<script>
export default {
  props: {
    title: String,
    list: Array,
    num: Number
  }
}
</script>

在父组件中通过子组件标签的属性传递数据,在子组件中通过props接收数据。

2. $emit

$emit是子组件向父组件传递数据的一种方式,通过监听子组件的自定义事件,在子组件中触发$emit方法来传递数据。

父组件定义:

<template>
  <child @handle-click="handleClick" />
</template>

<script>
import Child from './Child.vue'

export default {
  components: {
    Child
  },
  methods: {
    handleClick(value) {
      console.log(value)
    }
  }
}
</script>

子组件定义:

<template>
  <button @click="handleClick">点击</button>
</template>

<script>
export default {
  methods: {
    handleClick() {
      this.$emit('handle-click', '我是子组件传递的数据')
    }
  }
}
</script>

在父组件中通过子组件标签绑定自定义事件,子组件在需要传递数据时触发$emit方法,并将数据作为参数传递给父组件。

3. $on/$once

$on/$once是非父子组件之间传递数据的一种方式,通过Vue实例的事件总线来进行传递。

发送方定义:

<template>
  <button @click="handleClick">点击</button>
</template>

<script>
export default {
  methods: {
    handleClick() {
      this.$root.$emit('send-data', '我是发送方传递的数据')
    }
  }
}
</script>

接收方定义:

<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  created() {
    this.$root.$on('send-data', this.handleReceive)
  },
  beforeDestroy() {
    this.$root.$off('send-data')
  },
  methods: {
    handleReceive(data) {
      this.message = data
    }
  }
}
</script>

在发送方中通过$root获取Vue实例,使用$emit方法发送数据;接收方中在created生命周期中监听'send-data'事件,并在beforeDestroy中卸载监听;使用handleReceive方法接收数据,并修改message的值。

综上所述,这三种方式都是Vue组件通信中常用的方法,可以根据具体的使用场景选择适合的方法来进行数据传递。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue组件通信传递数据的三种方式 - Python技术站

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

相关文章

  • vue3中调用api接口实现数据的渲染以及详情方式

    当我们在Vue 3中进行开发时,我们通常需要与后端API进行数据交互。这里提供一个完整的攻略,帮助开发者学习如何在Vue 3中调用API接口实现数据的渲染以及详情方式。 步骤一:安装和引入axios Axios是一个流行的网络请求库,我们可以通过npm命令来安装: npm install axios 在Vue 3中,我们通常通过在main.js中全局引入ax…

    Vue 2023年5月28日
    00
  • vite + electron-builder 打包配置详解

    下面我将为您详细讲解“vite + electron-builder 打包配置详解”的完整攻略。 1. 准备工作 我们首先需要安装 node.js 和 npm,以便我们使用 viter 和 electron-builder。 2. 创建项目 我们使用 vite 创建一个新项目。在命令行中执行以下命令: npm init vite-app my-electro…

    Vue 2023年5月27日
    00
  • Vue props传入function时的this指向问题解读

    Vue.js是一款优秀的前端开发MVVM框架,其中props在组件之间传递数据是非常常见的,但是当我们在props中传递function时,可能会存在this指向的问题。本篇攻略将为大家详细讲解“Vue props传入function时的this指向问题解读”。 问题背景 在Vue.js中,使用props传递函数时,如果该函数需要用到父组件的数据或方法,就需…

    Vue 2023年5月28日
    00
  • Vue Router 实现动态路由和常见问题及解决方法

    让我来详细讲解一下“Vue Router 实现动态路由和常见问题及解决方法”的完整攻略。 一、动态路由的实现 1. 动态路由的定义 Vue Router 的动态路由,是指路由路径中包含变量的路由。例如,我们需要设计一个新闻详情页的路由,每篇新闻的 ID 都不同,我们可以在路由路径中使用变量表示这个 ID,例如 /news/:id。 2. 动态路由的示例 Vu…

    Vue 2023年5月27日
    00
  • vue基于input实现密码的显示与隐藏功能

    Vue基于input实现密码的显示与隐藏功能的攻略如下: 开发环境搭建 首先我们需要保证有一个稳定的开发环境。这里我们可以借助脚手架工具Vue-cli,快速地搭建起一个本地环境。 密码框显示状态绑定 我们需要通过v-model指令来将input框的显示状态进行绑定。在data里面新增一个变量passwordVisible,并且默认设置为false,表示密码框…

    Vue 2023年5月27日
    00
  • vue实现一个单文件组件的完整过程记录

    下面是“vue实现一个单文件组件的完整过程记录”的攻略: 什么是单文件组件? 单文件组件是Vue.js的一个重要概念。所谓单文件组件,就是一个Vue组件被封装在一个独立的文件中,包括组件所需的模板、CSS样式和JavaScript代码。单文件组件的扩展名通常为.vue,这个文件可以被其他Vue组件或Vue实例引用和渲染,从而将组件保持独立和可复用。 基本结构…

    Vue 2023年5月28日
    00
  • 解决idea中debug工具栏消失后如何显示的问题

    当我们使用IntelliJ IDEA进行调试时,有时会遇到调试工具栏消失的问题,这样我们就无法查看和控制调试过程中的变量值、控制程序运行等操作。在这里,我将介绍一些方法来解决debug工具栏消失的问题。 方法一:检查工具栏是否被隐藏 有时候,我们可能会意外地将debug工具栏隐藏起来了,所以第一步是确认一下工具栏是否被隐藏。你可以使用以下步骤来检查: 点击”…

    Vue 2023年5月28日
    00
  • 详解vue生命周期

    当我们开发 Vue.js 应用时,Vue 实例会经历一系列的过程,这些过程被称为“生命周期”。Vue 提供了一些钩子函数,让我们在生命周期不同时刻执行代码以达到相应的目的。下面将详解 Vue 生命周期的完整攻略。 生命周期概述 Vue 生命周期分为八个阶段,每个阶段对应一个钩子函数,以下是八个阶段的钩子函数: beforeCreate:在实例初始化之后,数据…

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