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

Vue2 父子组件数据传递与调用:从 ref 到 $emit

提示:https://github.com/jeecgboot/jeecgboot-vue2

文章目录

  • 案例
  • 父组件向子组件传递数据的方式
  • 父组件调用子组件方法的方式
  • 子组件向父组件传递数据的方式
  • 流程示意图


案例

提示:以下是本篇文章正文内容,下面案例可供参考

以下是 整合后的关键代码示例,展示父子组件间的数据传递与方法调用:

父组件 Parent.vue

<template>
  <!-- 1. 父组件通过 ref 引用子组件 -->
  <sysMessage-modal ref="modalForm" @ok="modalFormOk"></sysMessage-modal>
</template>

<script>
export default {
  components: {
    SysMessageModal
  },
  // 方法定义
  methods: {
    // 3. 父组件调用子组件方法并传递数据
    handleEdit(record) {
      this.$refs.modalForm.edit(record); // 调用子组件的 edit 方法
    },
    // 4. 父组件监听子组件的 @ok 事件
    modalFormOk() {
      console.log('处理子组件回调(子向父传数据)');
      this.loadData(); // 刷新表格数据
    }
  }
}
</script>

子组件 SysMessageModal.vue

<template>
  <a-drawer @close="close">
    <!-- 表单内容 -->
  </a-drawer>
</template>

<script>
export default {
  methods: {
    // 2.通过方法参数接收父组件数据
    edit(record) {
      this.model = Object.assign({}, record); // 接收父组件数据
      this.visible = true;
      // 填充表单逻辑...
    },
    // 5. 子组件通过事件向父组件传递数据
    handleOk() {
      this.$emit('ok'); // 触发父组件监听的事件
    }
  }
}
</script>

父组件向子组件传递数据的方式

  1. 通过方法调用传递数据
    父组件通过 ref 获取子组件实例,直接调用子组件的方法并传递数据。
    • 在父组件的模板中,子组件通过 ref="modalForm" 注册引用。
    • 当父组件需要编辑数据时(如点击编辑按钮),会调用子组件的 edit 方法,并将当前行数据 record 作为参数传入:
 // 父组件触发编辑操作
   handleEdit(record) {
     this.$refs.modalForm.edit(record); // 将 record 传递给子组件
   }

 // 子组件的 `edit` 方法接收数据并更新表单:
   edit(record) {
     this.model = Object.assign({}, record); // 接收父组件传递的数据
     // 更新表单字段...
   }

父组件调用子组件方法的方式

  1. 通过 ref 直接调用子组件方法
    父组件通过 this.$refs.modalForm 获取子组件实例,直接调用其方法。
    • 当用户点击“新增”按钮时,父组件调用子组件的 add 方法打开表单:
  handleAdd() {
    this.$refs.modalForm.add(); // 调用子组件的 add 方法
  }

// 子组件的 `add` 方法负责初始化空表单并显示抽屉:
  add() {
    this.edit({}); // 初始化空数据
    this.visible = true; // 显示抽屉
  }

子组件向父组件传递数据的方式

  1. 通过事件触发传递
    子组件通过 $emit 触发事件通知父组件,并可以携带数据。
    • 子组件在提交成功后触发 ok 事件:
     this.$emit('ok'); // 触发父组件的 @ok 事件

//父组件监听此事件,并执行 `modalFormOk` 方法刷新数据:
     <sysMessage-modal @ok="modalFormOk"></sysMessage-modal>

     modalFormOk() {
       this.loadData(); // 父组件重新加载数据
     }

流程示意图

方向方式代码示例
父组件 → 子组件通过 ref 调用子组件方法并传参this.$refs.modalForm.edit(record);
父组件调用子组件方法通过 ref 引用直接调用this.$refs.modalForm.add();
子组件 → 父组件通过 $emit 触发事件this.$emit('ok');
http://www.dtcms.com/a/111692.html

相关文章:

  • Python列表(List)深度解析
  • Java EE期末总结(第二章)
  • CExercise_04_1运算符_4交换两个不同整数的值
  • 算法刷题记录——LeetCode篇(3.2) [第211~212题](持续更新)
  • CExercise_05_1函数_1.1素数(要对键盘录入的数据做参数校验)
  • 游戏引擎学习第204天
  • 使用 .NET 9 和 Azure 构建云原生应用程序:有什么新功能?
  • ArkTs的UI装饰器(自定义组件生命周期、页面组件生命周期、所有UI装饰器使用及示例)
  • C++ | C++11知识点
  • react redux的学习,单个reducer
  • Spring-IOC部分
  • python __init__文件的作用
  • (51单片机)矩阵按键密码锁表白(C语言代码编撰)(矩阵按键教程)(LCD1602浅教程)
  • Python数据结构之有序列表
  • docker使用汇总
  • 【YOLO系列(V5-V12)通用数据集-工程用车检测数据集】
  • MINIQMT学习课程Day8
  • 解锁大数据可视化设计,让数据会 “说话”
  • Docker安装、配置JDK17
  • 程序化广告行业(59/89):广告验证与反作弊实战技巧
  • HTML jQuery 项目 PDF 批注插件库在线版 API 示例教程
  • PostgreSQL的扩展(extensions)-常用的扩展-pg_dirtyread
  • 55.基于springboot+vue的汽车租赁管理系统
  • Flink CDC Pipeline mysql to doris
  • 关于JVM和OS中的指令重排以及JIT优化
  • 小刚说C语言刷题——第14讲 逻辑运算符
  • Jetpack Compose `ACTION_HOVER_EXIT` 事件异常解决方案
  • 纯个人整理,蓝桥杯使用的算法模板day2(0-1背包问题),手打个人理解注释,超全面,且均已验证成功(附带详细手写“模拟流程图”,全网首个
  • MySQL-SQL-DDL语句、表结构创建语句语法、表约束、表数据类型
  • Dive into Deep Learning - 2.4. Calculus (微积分)