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日

相关文章

  • vue+element的表格实现批量删除功能示例代码

    下面是 “vue+element的表格实现批量删除功能示例代码” 的完整攻略: 1. 安装 Element UI 和 Axios 在开始之前,你需要先安装 Element UI 和 Axios,可以使用 npm 来安装: npm install element-ui axios –save 同时在文件中引入: import Vue from ‘vue’ i…

    Vue 2023年5月28日
    00
  • element中el-autocomplete的常见用法示例

    当使用 Vue.js 和 Element UI 搭建网站时,使用 el-autocomplete 组件可以实现一个自动完成的输入框。以下是 el-autocomplete 的常见用法示例: 基本用法 使用 v-model 在父组件中绑定输入框的值,使用 fetchSuggestions 方法获取自动完成的选项列表: <template> <…

    Vue 2023年5月28日
    00
  • 详解Vue中的keep-alive

    标题: 详解Vue中的keep-alive使用方法和原理 正文:Vue中的keep-alive是一个性能优化的重要组件,它可以将不活跃的组件缓存起来,减少组件的不必要的重渲染,提升页面的渲染效率。本文主要介绍keep-alive的使用方法和原理。 keep-alive的常用属性 keep-alive有几个常用的属性: include:需要被缓存的组件名,可以…

    Vue 2023年5月27日
    00
  • 实现vuex原理的示例

    想要实现 Vuex 的原理,我们需要先理解 Vuex 的基本概念和工作原理。Vuex 是一个专门为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用程序的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 要实现 Vuex 的原理,可以从以下几个步骤开始: 定义状态:如同 Vuex 的定义一样,我们需要定义应用程序的所有状态…

    Vue 2023年5月29日
    00
  • 详解Vuex的属性和作用

    以下是“详解Vuex的属性和作用”的完整攻略。 什么是Vuex Vuex是一个专门为Vue.js设计的状态管理库。Vuex集中式存储管理了整个应用的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 Vuex的核心概念 Vuex中包括了5个核心概念: state 它表示保存整个应用状态的对象。初始状态可以在这里定义,并且它可以包含很多的属性。 gett…

    Vue 2023年5月28日
    00
  • Vue组件通信方式(父传子、子传父、兄弟通信)

    Vue组件通信是非常重要的技能,因为在实际开发过程中,我们需要将不同的组件拼接起来形成一个完整的网站或应用。在Vue中,组件通信主要有三种方式:父传子、子传父和兄弟通信。 父传子 父传子通信是指父组件将数据或方法通过属性的方式传递给子组件。子组件可以通过props接收父组件的数据,并且可以使用这些数据来渲染页面或触发某些行为。 父组件中的代码: <te…

    Vue 2023年5月27日
    00
  • vue.js中关于点击事件方法的使用(click)

    关于 Vue.js 中 click 事件的使用方法,可以通过以下几个步骤来进行实现: 步骤一:在 Vue 组件中定义 click 事件方法 在 Vue 组件中,可以通过定义 methods 属性来添加事件处理方法,其中可以包含一系列的方法,包括 Vue 中的 click 事件: <template> <div> <button …

    Vue 2023年5月28日
    00
  • 解决vscode进行vue格式化,会自动补分号和双引号的问题

    下面我将为您详细讲解如何解决 VSCode 进行 Vue 格式化时自动补分号和双引号的问题: 问题分析 在编写 Vue 代码时,我们通常会使用 VSCode 进行格式化,这可以让我们的代码更加美观易读。但是在使用 VSCode 进行 Vue 格式化时,会出现自动补分号和双引号的问题,这对我们的开发和调试带来了很大的不便。 解决方法 针对这个问题,我们可以采用…

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