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

yizhihongxing

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 DatePicker实现日期选择器封装

    下面是详细讲解 “vue+element DatePicker实现日期选择器封装”的完整攻略: 前置知识 在开始讲解之前,我们需要掌握一些前置知识。 首先,我们需要掌握 Vue.js 和 Element UI 的基本用法以及如何搭建 Vue.js 项目。其次,我们需要了解 DatePicker 组件在 Element UI 中的基本用法。最后,我们需要掌握如…

    Vue 2023年5月29日
    00
  • 关于vue属性使用和不使用冒号的区别说明

    关于Vue属性的使用和不使用冒号的区别,主要涉及Vue的模板语法和组件属性传递。在Vue中,通常使用“v-bind”指令和冒号来将数据绑定到HTML元素的属性上。而不使用冒号,则意味着传递一个具体字符串值或变量名。 Vue属性使用冒号的区别: 数据绑定 在Vue中使用冒号可以实现数据绑定,让模板中的HTML元素及其对应的属性随数据变化而动态更新。这个特性可以…

    Vue 2023年5月27日
    00
  • vue中{{}},v-text和v-html区别与应用详解

    让我给你详细讲解一下”Vue中{{ }},v-text和v-html区别与应用详解”。 什么是Vue.js Vue.js是一个轻量级的JavaScript框架,它专注于构建用户界面,同时也可以用于构建单页面应用程序。它的核心是响应式编程,通过对“数据驱动视图”的理念来实现用户界面的构建。Vue.js支持一些基本的指令以实现与用户界面的交互,如:{{}},v-…

    Vue 2023年5月28日
    00
  • vant 时间选择器–开始时间和结束时间实例

    vant 时间选择器是一个基于Vue.js的组件库,其中包含了常用的时间选择器组件。下面就详细讲解vant 时间选择器的开始时间和结束时间实例的攻略。 一、引入组件 在使用 vant 时间选择器组件之前,需要先在项目中引入这个组件库。 <!– 引入样式文件 –> <link rel="stylesheet" href…

    Vue 2023年5月29日
    00
  • vue发送websocket请求和http post请求的实例代码

    我来帮你讲解一下。 发送websocket请求 在Vue中,我们可以使用vue-websocket库来实现对Websocket的使用。首先,在项目中安装vue-websocket库: npm install vue-websocket –save 接下来,在Vue实例中,我们需要使用mixins来引入websocket相关配置,并且在钩子函数中绑定事件和发…

    Vue 2023年5月28日
    00
  • vue中this.$refs.name.offsetHeight获取不到值问题

    问题背景: 在vue开发中,有时候我们需要获取某个元素或者组件的高度值,利用this.$refs.name.offsetHeight是个非常简便的方式,但是它并不总是奏效,许多开发者在这种情况下却无法获取到对应的高度值,究竟是为什么呢? 解决方案: 经过笔者的实践和总结,出现这种问题的情况大多是因为元素或组件还没有被渲染到Dom树上,因此高度值无法获取。针对…

    Vue 2023年5月29日
    00
  • 在vue中封装方法以及多处引用该方法详解

    在Vue中,我们可以通过封装方法来复用代码,提高开发效率。下面我将详细介绍如何在Vue中封装方法以及多处引用该方法的实现方法。 封装方法 在Vue中封装方法可以通过创建一个公共JS文件来实现。假设我们需要封装一个计算年龄的方法。 创建utils.js文件 您可以在项目的src目录下创建一个名为utils.js的文件。 定义计算年龄方法 在utils.js中定…

    Vue 2023年5月27日
    00
  • vue的el-select绑定的值无法选中el-option问题及解决

    当使用Vue的el-select组件时,可能会遇到无法选中el-option的问题。这个问题常见于el-option基于v-for动态渲染的情况下。 出现这个问题的原因,是因为el-select组件中v-model绑定的值和el-option组件中v-bind:value绑定的值类型不一致导致的。解决这个问题有以下两种方法: 方法一:更换v-model绑定的…

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