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

【Vue】父组件向子组件传递参数;子组件向父组件触发自定义事件

父组件向子组件传递参数

方法一:props

在 Vue 中,父组件向子组件传递数据主要通过props来实现,以下是具体的步骤:

父组件中传递数据

在父组件中,当需要调用子组件 AddSampleDialog 时,通过 v-bind 或其缩写:绑定要传递的数据。

  • v-bind或其缩写::用来动态的绑定一个或者多个属性,或者向另一个组件传递props值

假设要传递一个名为 sampleData 的对象数据给子组件,可以这样写:

<AddSampleDialog ref="addSampleDialog":title="sample_dialog_title":projectId="projectId":sample_form="sample_form"@newDataAdded="getSample"
></AddSampleDialog>

这里的sampleData是父组件中的数据,可以是在data函数中定义的,也可以是通过computed计算属性得到的,或者是从接口获取到的数据等。

子组件中接收数据

在子组件AddSampleDialog中,通过props选项来接收父组件传递过来的数据。在AddSampleDialog组件的script部分,添加如下代码:

export default {name: 'AddSampleDialog',props: {sampleData: {type: Object, // 根据实际传递的数据类型进行修改required: true // 如果该数据是必须的,可以设置为true}},created() {console.log('接收到的数据:', this.sampleData);}
}

在上述代码中,props定义了一个名为sampleData的属性,指定了其数据类型为Object,并在created钩子函数中打印出接收到的数据,可以根据实际需求在子组件的其他地方使用该数据。

方法二:ref

在子组件AddSampleDialog中的data函数中定义一个值 dialogVisible ,用于控制该子组件是否显示

data() {return {dialogVisible: false,}
}

在父组件中可以通过 ref 给子组件添加一个引用,父组件通过这个引用可以在JavaScript中直接访问该元素或者子组件

<AddSampleDialog ref="addSampleDialog":title="sample_dialog_title":projectId="projectId":sample_form="sample_form"@newDataAdded="getSample"
></AddSampleDialog>

在父组件的任何方法中可以通过 `this.$refs.addSampleDialog 这个引用,访问或修改子组件的属性 dialogVisible

showAddDialog() {this.$refs.addSampleDialog.dialogVisible = true;
},

子组件向父组件触发自定义事件

场景:新增信息子组件新增数据后,需要让父组件table获取最新数据

使用$emit和v-on

  • 原理:子组件通过$emit向父组件触发一个自定义事件,并将新增的数据作为参数传递给父组件,父组件在模板中通过v-on或其缩写$监听该事件,在事件处理函数中更新table的数据。

  • 示例代码

    • 子组件中触发事件:在dialog子组件中,当新增数据成功后,通过$emit触发一个自定义事件newDataAdded,并将新增的数据作为参数传递。

    • 注意:newData作为参数可填可不填

this.$emit('newDataAdded', newData);
// or
this.$emit('newDataAdded');
  • 父组件中监听事件并更新数据:在父组件的模板中,使用v-on监听dialog子组件的newDataAdded事件,在事件处理函数中更新table的数据。

<template><div><table-component :data="tableData"></table-component><dialog-component @newDataAdded="handleNewDataAdded"></dialog-component></div>
</template>
​
<script>
import TableComponent from './TableComponent.vue';
import DialogComponent from './DialogComponent.vue';
export default {components: {TableComponent,DialogComponent},data() {return {tableData: []};},methods: {handleNewDataAdded(newData) {this.tableData.push(newData);}}
};
</script>

http://www.lryc.cn/news/521007.html

相关文章:

  • 搜广推校招面经七
  • Leetcode 518. 零钱兑换 II 动态规划
  • 【EI 会议征稿】第四届材料工程与应用力学国际学术会议(ICMEAAE 2025)
  • 集合的线程安全
  • 《深入理解Mybatis原理》Mybatis中的缓存实现原理
  • C# 数据拟合教程:使用 Math.NET Numerics 的简单实现
  • C# 中对 Task 中的异常进行捕获
  • Android车机DIY开发之软件篇(九)默认应用和服务修改
  • SimpleFOC01|基于STM32F103+CubeMX,移植核心的common代码
  • web.xml常用配置
  • 代码随想录刷题day07|(数组篇)58.区间和
  • 【Linux】进程结束和进程等待
  • 可编辑精品PPT | 城投集团(行业)数字化解决方案
  • 统计学习算法——决策树
  • 基于网络爬虫技术的网络新闻分析
  • 51_Lua面向对象编程
  • 关于在 Kotlin DSL 中,ndk 的配置方式
  • 【论文阅读+复现】High-fidelity Person-centric Subject-to-Image Synthesis
  • Spring Boot 应用开发入门
  • 【C语言】字符串函数详解
  • 【Vim Masterclass 笔记14】S07L29 + L30:练习课08 —— Vim 文本对象同步练习(含点评课内容)
  • 非PHP开源内容管理系统(CMS)一览
  • WEB 攻防-通用漏-XSS 跨站脚本攻击-反射型/存储型/DOMBEEF-XSS
  • SQLAlchemy -批量插入时忽略重复
  • 1月13日学习
  • Steam个人开发者注册备记
  • django在线考试系统
  • Laravel 中 Cache::remember 的基本用途
  • 前端进程和线程及介绍
  • OpenGL —— 基于Qt的视频播放器 - ffmpeg硬解码,QOpenGL渲染yuv420p或nv12视频(附源码)