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

Vue3组件通讯——自定义事件(子->父)

需求如下:

1.在子组件中,当用户点击提交按钮后,更新数据库

2.数据更新成功后,子组件通知父组件getUserInfo函数,重新获取数据,同步更新

3.子组件等待getUserInfo函数执行完毕后,调用init函数,获取父组件更新后的数据

在子组件中,当用户点击提交按钮后,更新数据库

// 提交表单的方法
async function submit() {
    // 更新用户配置文件
    const res = await updateUserProfile(form);

    if (res.code === 200) {
      ElMessage.success(res.msg);
      await emitEventAndUpdate() //调用自定义事件
    } else {
      ElMessage.error(res.msg || "更新失败");
    }
}

2.数据更新成功后,子组件通知父组件getUserInfo函数,重新获取数据,同步更新

   在子组件中定义 自定义事件,父组件中定义该事件需要调用的方法

//在子组件中定义自定义事件
const emit = defineEmits(['updateUserProfile']);
//在父组件中,定义该事件所需要调用的方法
<userInfo @updateUserProfile="getUserInfo"/>

3.子组件等待getUserInfo函数执行完毕后,调用init函数,获取父组件更新后的数据

// 在子组件促发事件,并等待父组件处理完成
async function emitEventAndUpdate() {
  await new Promise((resolve) => {
    emit('updateUserProfile',resolve); // 将 resolve 传递给父组件
  });
  init(); // 等待事件完成后调用 init()
}

//父组件处理完成后,执行resolve()表示处理完成
async function getUserInfo(resolve) {
  const res = await getUserProfile().then(res => {
      if(res.code==200){
         Object.assign(user,res.data)
         userStore.setUserInfo(toRaw(user))
      }
  });
  resolve(); //调用 resolve 表示事件处理完成
};


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

相关文章:

  • 【博主推荐】 Microi吾码开源低代码平台,快速建站,提高开发效率
  • 机器人技术:ModbusTCP转CCLINKIE网关应用
  • Nature Electronics——近传感器计算:50 nm异构集成技术的革命
  • QT 端口扫描附加功能实现 端口扫描5
  • CANN 学习——基于香橙派 KunpengPro(1)
  • 路由器的转发表
  • 洛谷P1617———数字转英文
  • 领域驱动设计(DDD)在C#中的实践
  • HTML5 翻转动画(Flip Animation)详解
  • 英伟达Project Digits赋能医疗大模型:创新应用与未来展望
  • 第十一章 测试——1.单元测试
  • 如何使用PyTorch进行模型微调
  • MyBatis面试-1
  • 【git】在服务器使用docker设置了一个gogs服务器,访问和现实都不理想
  • 云南省有一级科技查新机构吗?
  • STM32和国民技术(N32)单片机串口中断接收数据及数据解析
  • LeetCode 744. 寻找比目标字母大的最小字母
  • android ROM开发网络下载速度缓慢问题解决方案
  • Docker入门之docker基本命令
  • ingress-nginx-controller安装
  • jenkins入门7 --发送邮件1
  • 基于Qt/C++二维码生成器(附工程源码链接)
  • ClickHouse Cloud Backup 带宽控制问题诊断以及原理分析
  • 常用命令2-netstat
  • 5G学习笔记之SNPN系列之网络选择
  • 离线录制激光雷达数据进行建图