【前端--Vue】组件之间的多种通信方式,一文彻底搞懂组件通信!

 本篇将重点讲解vue中的多种组件通信方式,包括【父传子】【子传父】【兄弟组件通信】【依赖注入】等等,并提供具体案例来让小伙伴们加深理解、彻底掌握!💕

🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主、华为云云享专家,分享前端后端相关技术与工作常见问题~

💟 作    者:码喽的自我修养❣️
📝 专    栏:vue2/3 从基础到起飞

🌈 若有帮助,还请 关注➕点赞➕收藏  ,不行的话我再努努力💪💪💪

🌈🌈文章目录

一、组件通信

1.什么是组件通信?

2.组件关系分类

3.通信解决方案

4.父子通信流程

5.父向子通信代码示例

6.子向父通信代码示例

二、详解props

1.Props 定义

2.Props 作用

3.特点

4.代码演示

三、props校验

1.思考

2.作用

3.语法

4.代码演示

四、props校验完整写法

1.语法

2.代码实例

3.注意

五、props & data、单向数据流

1.共同点

2.区别

3.单向数据流:

4.代码演示

5.口诀

六、非父子通信 -- event bus 事件总线

1.作用

2.步骤

3.代码示例

七、非父子通信 -- provide&inject

1.作用

2.场景

3.语法

Vue是一款流行的前端框架,它支持自定义组件,并提供了v-model指令来实现双向数据绑定。同时,Vue也提供了多种方式来实现父子组件之间的同步通信。 对于自定义组件的v-model双向绑定来说,最简单的方法就是在子组件的props中定义一个value属性,并将其绑定到父组件中的data中的属性。然后,子组件中通过$emit('input', value)触发一个input事件来改变父组件的数据。例如: 父组件: ```vue <template> <div> <custom-input v-model="message"></custom-input> </div> </template> <script> import CustomInput from './CustomInput.vue'; export default { components: { CustomInput }, data() { return { message: 'Hello world!' }; } }; </script> ``` 子组件: ```vue <template> <div> <input :value="value" @input="$emit('input', $event.target.value)"> </div> </template> <script> export default { props: { value: { type: String, required: true } } }; </script> ``` 除了上述方式外,还可以通过自定义指令、混入等方式来实现自定义组件的v-model双向绑定。 对于父子组件之间的同步通信,Vue提供了多种方式来实现,例如: 1. props和$emit 在父组件中通过props将数据传递给子组件,在子组件中通过$emit触发一个事件并将数据传递回父组件。例如: 父组件: ```vue <template> <div> <child-component :message="message" @update-message="updateMessage"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { message: 'Hello world!' }; }, methods: { updateMessage(value) { this.message = value; } } }; </script> ``` 子组件: ```vue <template> <div> <input :value="message" @input="updateMessage($event.target.value)"> </div> </template> <script> export default { props: { message: { type: String, required: true } }, methods: { updateMessage(value) { this.$emit('update-message', value); } } }; </script> ``` 2. $parent和$children 在父组件中通过$children获取所有子组件,然后通过$parent获取父组件,从而实现父子组件之间的通信。例如: 父组件: ```vue <template> <div> <child-component></child-component> <button @click="sendMessage">Send message to child</button> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, methods: { sendMessage() { this.$children[0].sendMessage('Hello child'); } } }; </script> ``` 子组件: ```vue <template> <div> <p>{{ message }}</p> </div> </template> <script> export default { data() { return { message: '' }; }, methods: { sendMessage(value) { this.message = value; } } }; </script> ``` 除了上述方式外,还可以通过$refs、事件总线、Vuex等方式来实现父子组件之间的同步通信。需要根据具体的场景来选择合适的方式。
评论 83
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码喽的自我修养

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值