收藏 分销(赏)

总结了-Vue3-的七种组件通信方式-别再说不会组件通信了.docx

上传人:二*** 文档编号:4750815 上传时间:2024-10-11 格式:DOCX 页数:9 大小:27.67KB
下载 相关 举报
总结了-Vue3-的七种组件通信方式-别再说不会组件通信了.docx_第1页
第1页 / 共9页
亲,该文档总共9页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、总结了 Vue3的七种组件通信方式,别再说不会组件通信了本篇文章是全部采用的script setup这种组合式API写法,相对于选项式来说,组合式API这种写法更加自由,具体可以参考Vue文档卬对两种方式的描述。本篇文章将介绍如下七种组件通信方式:props emitv-modelrefsprovide/injecteventBusvuex/pinia(状态管理工具)开始搞事情举一个栗子俗话说的好,学习不写demo,那就是耍流氓本篇文章将围绕下面这个demo,如下列图所示:V Ol component-commurwcat X +C Iocalho$t8080JavaScriptHTMLCSS

2、请输入上图中,一列表.和.输入框一分别是父子组件,根据不同传值方式,可能谁是父组件谁是子组件会有所 调整。Props方式Props方式是Vue中最常见的一种父传子的一种方式,使用也比拟简单。根据上面的demo,我们将数据以及对数据的操作定义在父组件,子组件仅做列表的一个渲染;父组件代码如下:| child-components :list=listx/child-comp茄茄| div class=,child-wrap input| vmodel=商| div class=inputgroupap而后| /1 e m p 1 a|scriptimport ref from import Ch

3、ildcomponents from ./child .讥万const value =const handleAdd = () =)1 i st . va 1 ue . pu s h (va lue . va lue| value .value| / s c r i pt子组件只需要对父组件传递的值进行渲染即可,代码如下: | ul class=Hparentllass=lisrouRerTrorrropsistl0/li| /1 em p 1| emit方式emit方式也是Vue中最常见的组件通信方式,该方式用于子传父;根据上面的demo,我们将列表定义在父组件,子组件只需要传递添加的值即可

4、。子组件代码如下:div class=child-wrap input-group”)|v-model=valu/Mclass=form-control”buttorcMck=handleSubmlass=trtrrimar/ype=buttonJ emits(add, value.value)value.value =|在子组件中点击【添加】按钮后,emit一个自定义事件,并将添加的值作为参数传递。父组件代码如下:-父组件-|I i| M| /1 e m p 1|scriptimport ref from import Childcomponents from ./child.讥后|cons

5、t handleAdd =| list. value . push (| / s c r i p t在父组件中只需要监听子组件自定义的事件,然后执行对应的添加操作。v-model 方式v-model是Vue中一个比拟出色的语法糖,就比方下面这段代码|就是下面这段代码的简写形势Childcomponent :title=pageTitle” update:title=pageTitle = $event /|v-model确实简便了不少,现在我们就来看一下上面那个demo,如何用v-model实现。子组件|v-modelJvalueBclass=form-controldiv class=inp

6、ut-group-append)button click=handleAdd“ class=btn btn-primary“ type=button”|B |script setup)import ref, defineEmits, defineProps from vue const props = defineProps(type: Arradefault: () = 口,const emits = defineEmits(1 update:list1)/添加操彳const handleAdd =()=const arr = props ,list| arr.push(value.valu

7、e),emits(update:list amvalue.value =在子组件中我们首先定义props和emits,然后添加完成之后emit指定事件。注:update:*是Vue中的固定写法,*表示props中的某个属性名。 父组件中使用就比拟简单,代码如下:| template| ul class=parent| M| /1 em p 1|scriptimport ref from import Childcomponents from refs方式在使用选项式API时,我们可以通过this.$refs.name的方式获取指定元素或者组件,但是组合式API 中就无法使用哪种方式获取如果我们

8、想要通过ref的方式获取组件或者元素,需要定义一个同名的Ref对象,在组件挂载后就可以访问了。例如代码如下:| t emp 1 a t e| /child-componen6M| /tempi|scriptimport ref from import Childcomponents from ./childEon st childRefs = ref子组件代码如下:|div class=input-button click=| /1 em p 1 a|list.value.push(value.valuevalue.value =setup组件默认是关闭的,也即通过模板ref获取到的组件的公开

9、实例,不会暴露任何在*script setup*中声明的绑定。如果需要*公开需要通过*defineExpose* API暴露*。provide/inject 方式provide和inject是Vue中提供的一对API,该API可以实现父组件向子组件传递数据,无论层级有 多深,都可以通过这对API实现。例如代码如下所示:父组件|t emplat e| child-componentsx/child-components)| div class=,child-wrap input-group11!|v-model=不|class-form-contrTB|import ref. provide f

10、rom vueconst list = ref (JavaScript, HTML, CSSR|const value 二/ add触发后的事件处理函数onst handleAdd =()=list.value.push(value.value)value.value =子组件templateul class=parent /1 e m p 1import inject from vue值得注意的是使用provide进行数据传递时,尽量readonly进行数据的包装,防止子组件修改父级传 递过去的数据。事件总线Vue3中移除了事件总线,但是可以借助于第三方工具来完成,Vue官方推荐mittM或tinyemitterl3;在大多数情况下不推荐使用全局事件总线的方式来实现组件通信,虽然比拟简单粗暴,但是长久来说 维护事件总线是一个大难题,所以这里就不展开讲解了,具体可以阅读具体工具的文档状态管理工具Vuex和Pinia是Vue3中的状态管理工具,使用这两个工具可以轻松实现组件通信,由于这两个 工具功能比拟强大,这里就不做展示了,具体可以查阅文档

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
百度文库年卡

猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服