vue组件间的通信

本文详细介绍了Vue组件间通信的多种方式,包括 Props 从父组件传递给子组件,子组件通过 emit 传递数据给父组件,同胞组件间通过父组件传递或事件总线(Event Bus)通信,以及使用状态管理工具 Vuex 进行复杂状态管理。还提到了 Vue3 中的状态管理变化以及 refs 的使用,特别强调了在组合式API中如何使用 refs。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 父子组件的相互通信

        1:父组件传递给子组件(Props)         

                父组件代码如下:

        子组件只需要对父组件传递的值进行渲染即可,代码如下:

 2:emit方式----子传父:   

        子组件代码如下:在子组件中点击【添加】按钮后,emit一个自定义事件,并将添加的值作为参数传递;

父组件代码如下:在父组件中只需要监听子组件自定义的事件,然后执行对应的添加操作;

3: 同胞传值(兄弟传值)---两个子组件依赖父组件传值

                法一:子元素先逆向传值给父组件,父组件在正向传值给另一个子组件;

                法二:通过中央事件总线(eventBus)的方式去传值;             

                        中央事件总线: 就是凌驾在我们需要同胞传值的组件之上的一个空的vue实例

                           1.eventBus文件夹就是用来存放中央事件总线这个实例的。

                           2.在新建的文件夹与文件之间创建一个空的vue实例。

                           3.子元素a抛出到事件总线,子元素b从中央事件总线中接受从组件a中抛出的值。

                                抛: eventbus.$emit("apao",this.ziatext)

                                接:$on()监听实例上的自定义事件

                                $on("你要监听的自定义事件是什么".(val就是自定义事件上绑定的数据)=>{

​                                         监听到了自定义事件这个回调就会执行

                                        })

        不推荐使用中央事件总线实现组件通信,原因如下:

                (1)Vue3中移除了事件总线,但是可以借助于第三方工具来完成,Vue官方推荐mitt[2]或tiny-emitter[3];

               (2)在大多数情况下不推荐使用全局事件总线的方式来实现组件通信,虽然比较简单粗暴,但是长久来说维护事件总线是一个大难题,所以这里就不展开讲解了,具体可以阅读具体工具的文档;

4:状态管理工具 --- 数据仓库,可任意通信;

        集中式存储所有组件的状态的小仓库,并且保持我们存储的状态以一种可以预测的方式发生变化。

        vueX产生背景:

                如果你的项目里有很多页面(组件/视图),页面之间存在多级的嵌套关系,此时,这些页面假如都需要共享一个状态的时候,此时就会产生以下两个问题,且vueX可以很好的解决;

                多个视图依赖同一个状态

                来自不同视图的行为需要变更同一个状态

        vueX安装使用

                (1)进入项目,在命令行中输入安装指令,回车

                        npm install vuex \--save

                (2)配置 vuex,使其工作起来:在src路径下创建store文件夹,然后创建index.js文件,文件内容如下:

        (3)修改main.js:

        (4)最后修改App.vue:

        (5)此时,启动项目npm run dev,即可在控制台输出刚才我们定义在store中的name的值。

                 官方建议使用:

                        (1)可将操作this.$store.state.XXX最好放在计算属性中: 

                        (2)也可以如下写:

修饰器:Getter

在组件中使用:

 

修改值:Mutation

 

修改App.vue

        以上是简单实现mutations的方法,是没有传参的,

        传不固定的参数,修改store/index.js

 

修改App.vue

 

异步操作:Actions

        Actions存在的意义是假设你在修改state的时候有异步操作;

        修改store/index.js

 

修改App.vue

运行项目,查看控制台

5:refs方式   

        在使用选项式API时,我们可以通过this.$refs.name的方式获取指定元素或者组件,但是组合式API中就无法使用哪种方式获取。如果我们想要通过ref的方式获取组件或者元素,需要定义一个同名的Ref对象,在组件挂载后就可以访问了。

父组件示例代码如下:

        子组件示例代码:

        setup组件默认是关闭的,也即通过模板ref获取到的组件的公开实例,不会暴露任何在**<script setup>**中声明的绑定。如果需要**公开需要通过****defineExpose**** API暴露**

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值