2:Vue.js 父子组件通信:让你的组件“说话”

devtools/2024/11/17 4:36:53/

上一篇我们聊了如何用 Vue.js 创建一个简单的组件,这次咱们再往前走一步,讲讲 Vue.js 的父子组件通信。组件开发里,最重要的就是让组件之间能够“说话”,数据能流通起来。废话不多说,直接开干!


父组件传数据给子组件

1. 父组件用 props 给子组件传值

在上一篇的按钮组件基础上,我们稍微改进下。假设我们有一个表单组件 MyForm.vue,里面有两个按钮,一个提交,一个重置:

父组件代码
<template><div><h3>请填写表单</h3><input type="text" placeholder="输入内容" v-model="inputValue" /><MyButton :label="'提交'" :type="'primary'" @click="handleSubmit" /><MyButton :label="'重置'" :type="'secondary'" @click="handleReset" /></div>
</template><script>
import MyButton from './MyButton.vue';export default {components: {MyButton,},data() {return {inputValue: '',};},methods: {handleSubmit() {alert(`提交内容:${this.inputValue}`);},handleReset() {this.inputValue = '';},},
};
</script>

亮点解释:

  1. props 传值MyButtonlabeltype 控制按钮显示的内容和样式。
  2. 事件绑定:父组件用 @click 把点击事件传给子组件,子组件不需要关心逻辑。

子组件怎么传消息给父组件?

在复杂场景里,子组件也需要把自己的“想法”告诉父组件,比如一个复选框列表,用户选择了某些选项,我们得把这些选项告诉父组件。

2. 子组件用 emit 通知父组件

我们来改造下按钮组件,让它在点击时通知父组件“我被点了!”。

子组件代码
<template><button :class="buttonClass" @click="notifyParent">{{ label }}</button>
</template><script>
export default {props: ['label', 'type'],methods: {notifyParent() {this.$emit('button-clicked', this.label);},},
};
</script>
父组件代码
<MyButton label="提交" @button-clicked="handleChildClick" />
<MyButton label="取消" @button-clicked="handleChildClick" />

父组件里的方法:

methods: {handleChildClick(label) {alert(`你点击了按钮:${label}`);},
},

亮点解释:

  1. $emit 的作用:子组件通过 $emit 触发事件,把数据传给父组件。
  2. 事件监听:父组件监听 button-clicked 事件,就能知道哪个按钮被点了。

小结

父子组件通信很简单:

        父传子用 props

        子传父用 $emit

这些小技巧能让你的组件更灵活,下次我们再聊聊更高级的通信方式,比如兄弟组件之间如何通信。敬请期待!


http://www.ppmy.cn/devtools/134616.html

相关文章

蓝桥杯——杨辉三角

代码 package day3;public class Demo2 {public static void main(String[] args) {// TODO Auto-generated method stub// for (int i 0; i < 10; i) {// for (int j 0; j < 10; j) {// System.out.print("外&#xff1a;"i"内&#xff1a;&qu…

【计算机网络】设备网卡NIC的工作内容有哪些呢?

我们平时上网&#xff0c;都需要经过设备网卡的处理&#xff0c;网络接口卡&#xff08;Network Interface Card&#xff0c;简称 NIC&#xff09;是计算机与网络之间的物理连接设备&#xff0c;负责处理网络数据的发送和接收。NIC 的功能涵盖了从物理层到数据链路层的多个方面…

leetcode21. Merge Two Sorted Lists

You are given the heads of two sorted linked lists list1 and list2. Merge the two lists into one sorted list. The list should be made by splicing together the nodes of the first two lists. Return the head of the merged linked list. 将两个升序链表合并为一…

ffmpeg视频编码

一、视频编码流程 使用ffmpeg解码视频帧主要可分为两大步骤&#xff1a;初始化编码器和编码视频帧&#xff0c;以下代码以h264为例 1. 初始化编码器 初始化编码器包含以下步骤&#xff1a; &#xff08;1&#xff09;查找编码器 videoCodec avcodec_find_encoder_by_name…

千益畅行,共享旅游新时代的璀璨之星与未来前景展望

在当今数字化和共享经济蓬勃发展的时代&#xff0c;旅游业也正经历着前所未有的变革。千益畅行共享旅游卡作为旅游行业创新模式的代表&#xff0c;正逐渐崭露头角。在这篇文章中&#xff0c;我们将深入剖析共享旅游卡的未来发展前景&#xff0c;并对未来旅游市场进行深度解读&a…

Elasticsearch 查看磁盘占用 查看指定索引磁盘占用

Elasticsearch 查看磁盘占用 查看指定索引磁盘占用 查看磁盘占用查看指定索引磁盘占用查看节点线程情况查询异步任务执行情况其他操作 考虑到既然数据要放在 es 中&#xff0c;那么相应的数据量往往都不会小&#xff0c;那么在对这些数据进行大批量的变动时&#xff0c;带来的磁…

matlab学习笔记:第三章课后习题

练习题1. &#xff08;1&#xff09; 生成一个6行3列的随机矩阵A&#xff0c;矩阵中每个元素都是位于区间[50,100]之间的随 机整数&#xff0c;下面我们假设矩阵A的每一行代表一名学生&#xff0c;这六名同学的三门科目的 成绩对应着三列&#xff1b; &#xff08;2&#x…

HTML的浮动与定位

1. 浮动 浮动可以使一个元素脱离自己原本的位置&#xff0c;并在父元素的内容区中向左或向右移动&#xff0c;直到碰到父元素内容区的边界或者其它浮动元素为止。 值描述left元素向左浮动right元素向右浮动 普通文档流&#xff1a;浏览器在默认情况下规定一个块元素在父元素…