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

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

上一篇我们聊了如何用 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.lryc.cn/news/485726.html

相关文章:

  • 6. Keepalived配置Nginx自动重启,实现7x24提供服务
  • 【PS】蒙版与通道
  • C++创建型模式之生成器模式
  • 鸿蒙NEXT应用示例:切换图片动画
  • postgresql(功能最强大的开源数据库)继承特性和分区实现
  • 论文笔记(五十六)VIPose: Real-time Visual-Inertial 6D Object Pose Tracking
  • 微服务治理详解
  • “南海明珠”-黄岩岛(民主礁)领海基线WebGIS绘制实战
  • Oracle数据库 创建dblink的过程及其用法详解
  • Linux从0——1之shell编程4
  • pycharm快速更换虚拟环境
  • MVVM框架
  • 数据仓库在大数据处理中的作用
  • 前端Javascript、Vue、CSS等场景面试题目(二)
  • 鸿蒙学习生态应用开发能力全景图-开发者支持平台(5)
  • 计算机网络各层设备总结归纳(更新ing)
  • 3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)
  • 品牌如何利用大数据工具,进行消费者洞察分析?
  • 鸿蒙实现 web 传值
  • uniapp vuex的使用
  • RabbitMQ实战启程:从原理到部署的全方位探索(上)
  • 【论文复现】轻松利用自适应特征融合实现去雾
  • 【大数据学习 | HBASE高级】hbase-phoenix 与二次索引应用
  • 高级java每日一道面试题-2024年11月09日-缓存中间件篇-Redis和Memecache有什么区别?
  • vscode 关闭绑定元素 隐式具有“any”类型这类错误
  • 手机ip地址异常怎么解决
  • 【售前方案】工业园区整体解决方案,智慧园区方案,智慧城市方案,智慧各类信息化方案(ppt原件)
  • 37.超级简易的计算器 C语言
  • 防火墙----iptables
  • 若点集A=B则A必能恒等变换地变为B=A这一几何常识推翻直线(平面)公理