当前位置: 首页 > article >正文

Vue2和Vue3子组件向父组件传值

在 Vue.js 中,子组件向父组件传递数据通常是通过自定义事件(events)来实现的。这种方法遵循 Vue.js 的单向数据流原则,即数据流动的方向是从父组件流向子组件,而事件传递的方向是从子组件传递回父组件。

Vue 2.x

在 Vue 2.x 中,子组件向父组件传递数据主要通过 $emit 方法触发自定义事件,并在父组件中监听这些事件来接收数据。

示例
  1. 子组件(ChildComponent.vue)
1<template>
2  <button @click="sendDataToParent">点击发送数据</button>
3</template>
4
5<script>
6export default {
7  methods: {
8    sendDataToParent() {
9      // 触发一个名为 'update-data' 的事件,并传递数据
10      this.$emit('update-data', '这是子组件发送的数据');
11    }
12  }
13};
14</script>
  1. 父组件(ParentComponent.vue)
1<template>
2  <div>
3    <child-component @update-data="handleDataFromChild"></child-component>
4    <p>收到的数据:{{ receivedData }}</p>
5  </div>
6</template>
7
8<script>
9import ChildComponent from './ChildComponent.vue';
10
11export default {
12  components: {
13    ChildComponent
14  },
15  data() {
16    return {
17      receivedData: ''
18    };
19  },
20  methods: {
21    handleDataFromChild(data) {
22      this.receivedData = data;
23    }
24  }
25};
26</script>

Vue 3.x

在 Vue 3.x 中,子组件向父组件传递数据的方式与 Vue 2.x 类似,但是 Vue 3.x 引入了一些新的 API 和改进。

示例
  1. 子组件(ChildComponent.vue):vue

深色版本

1<template>
2  <button @click="sendDataToParent">点击发送数据</button>
3</template>
4
5<script setup>
6const emit = defineEmits(['update-data']);
7
8function sendDataToParent() {
9  // 触发一个名为 'update-data' 的事件,并传递数据
10  emit('update-data', '这是子组件发送的数据');
11}
12</script>
  1. 父组件(ParentComponent.vue)
1<template>
2  <div>
3    <child-component @update-data="handleDataFromChild" />
4    <p>收到的数据:{{ receivedData }}</p>
5  </div>
6</template>
7
8<script setup>
9import { ref } from 'vue';
10import ChildComponent from './ChildComponent.vue';
11
12const receivedData = ref('');
13
14function handleDataFromChild(data) {
15  receivedData.value = data;
16}
17</script>

详细解释

  1. 子组件触发事件

    • 在 Vue 2.x 中,使用 this.$emit 触发自定义事件。
    • 在 Vue 3.x 中,使用 defineEmits 获取一个可以触发自定义事件的 emit 对象,并通过该对象触发事件。
  2. 父组件监听事件

    • 在 Vue 2.x 中,使用 @event-name 绑定一个方法来监听子组件触发的事件。
    • 在 Vue 3.x 中,也是使用 @event-name 绑定一个方法来监听子组件触发的事件。

注意事项

  1. 事件名称

    • 事件名称通常使用短横线命名法(kebab-case),如 update-data
    • 如果使用驼峰命名法(camelCase),Vue 会将其转换为短横线命名法。
  2. 传递数据

    • 在触发事件时,可以传递任意数量的参数。
    • 在父组件中监听事件时,可以通过参数接收这些数据。

http://www.kler.cn/a/301361.html

相关文章:

  • 计算机网络-理论部分(二):应用层
  • MySQL45讲 第二十四讲 MySQL是怎么保证主备一致的?——阅读总结
  • 哋它亢SEO技术分析:如何提升网站在搜索引擎中的可见性
  • 对PolyMarket的突袭
  • LeetCode 2816.翻倍以链表形式表示的数字
  • DQN系列算法详解
  • INIC6081量产工具下载,initio6081开卡软件分享
  • 前端自定义下载文件名
  • 第一篇 第3章 不确定型分析 第4章 设备更新分析 第5章价值工程
  • 基于SpringBoot+Vue的超市外卖管理系统
  • vue3使用provide和inject传递异步请求数据子组件接收不到
  • 大文件切片上传-vue3.0
  • 如何在VUE3中使用函数式组件
  • ecmascript和javascript的区别?
  • 从底层原理上理解ClickHouse 中的稀疏索引
  • 相互作用先验下的 3D 分子生成扩散模型 - IPDiff 评测
  • Hbase的简单使用示例
  • 在 RT-Thread 上使用单色屏 UI 库 - U8G2
  • 【Shiro】Shiro 的学习教程(四)之 SpringBoot 集成 Shiro 原理
  • 海外云手机是否适合运营TikTok?
  • Kubernetes部署(haproxy+keepalived)高可用环境和办公网络打通
  • Java 21的Preferences API的笔记
  • 分布式中间件-几个常用的消息中间件
  • redis基本数据结构-hash
  • 数据分析-11-时间序列分析的概念任务和主要方法
  • 第R2周:LSTM-火灾温度预测