我们会讲以下七种组件通信方式:
成都网站建设哪家好,找创新互联建站!专注于网页设计、网站建设公司、微信开发、微信小程序、集团企业网站设计等服务项目。核心团队均拥有互联网行业多年经验,服务众多知名企业客户;涵盖的客户类型包括:食品包装袋等众多领域,积累了大量丰富的经验,同时也获得了客户的一致赞誉!
本文将使用如下演示,如下图所示:
上图中,列表和输入框分别是父组件和子组件。根据不同的通信方式,会调整父子组件。
props 是 Vue 中最常见的父子通信方式,使用起来也比较简单。
根据上面的demo,我们在父组件中定义了数据和对数据的操作,子组件只渲染一个列表。
父组件代码如下:
v-model="value"
type="text"
class="form-control"
placeholder="Please enter"
/>
子组件只需要渲染父组件传递的值。
代码如下:
- {{ i }}
Emit也是Vue中最常见的组件通信方式,用于子组件向父组件传递消息。
我们在父组件中定义列表,子组件只需要传递添加的值。
子组件代码如下:
v-model="value"
type="text"
class="form-control"
placeholder="Please enter"
/>
点击子组件中的【添加】按钮后,我们会发出一个自定义事件,并将添加的值作为参数传递给父组件。
父组件代码如下:
- {{ i }}
在父组件中,只需要监听子组件的自定义事件,然后执行相应的添加逻辑即可。
v-model 是 Vue 中一个优秀的语法糖,比如下面的代码。
这是以下代码的简写形式
这确实容易了很多。现在我们将使用 v-model 来实现上面的示例。
v-model="value"
type="text"
class="form-control"
placeholder="Please enter"
/>
在子组件中,我们先定义props和emits,添加完成后再发出指定的事件。
注意:update:*是Vue中固定的写法,*代表props中的一个属性名。
在父组件中使用比较简单,代码如下:
- {{ i }}
使用API选项时,我们可以通过this.$refs.name获取指定的元素或组件,但在组合API中不行。如果我们想通过ref获取,需要定义一个同名的Ref对象,在组件挂载后可以访问。
示例代码如下:
{{ i }}
子组件代码如下:
v-model="value"
type="text"
class="form-control"
placeholder="Please enter"
/>
注意:默认情况下,setup 组件是关闭的,通过模板 ref 获取组件的公共实例。如果需要公开,需要通过defineExpose API 公开。
provide/inject是 Vue 中提供的一对 API。无论层级多深,API 都可以实现父组件到子组件的数据传递。
示例代码如下所示:
v-model="value"
type="text"
class="form-control"
placeholder="Please enter"
/>
子组件
- {{ i }}
注意:使用 provide 进行数据传输时,尽量使用 readonly 封装数据,避免子组件修改父组件传递的数据。
Vue 3 中移除了 eventBus,但可以借助第三方工具来完成。Vue 官方推荐使用 mitt 或 tiny-emitter。
在大多数情况下,不建议使用全局事件总线来实现组件通信。虽然比较简单粗暴,但是维护事件总线从长远来看是个大问题,这里就不解释了。有关详细信息,您可以阅读特定工具的文档。
Vuex 和 Pinia 是 Vue 3 中的状态管理工具,使用这两个工具可以轻松实现组件通信。由于这两个工具都比较强大,这里就不一一展示了。有关详细信息,请参阅文档。
分享标题:七个Vue3中的组件通信方式
文章出自:http://www.mswzjz.cn/qtweb/news40/516940.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能