欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > Vue3:$refs和$parent实现组件通信

Vue3:$refs和$parent实现组件通信

2025/3/13 2:09:28 来源:https://blog.csdn.net/qq_48597462/article/details/142391755  浏览:    关键词:Vue3:$refs和$parent实现组件通信

在Vue3中,refs和refs和parent是用于组件间通信的重要机制

一.$refs

1.操作子组件数据

一旦获取到子组件的实例,父组件可以修改子组件暴露的变量值,实现父子组件间的直接数据交换。

2.批量处理子组件

$refs可以用于同时获取多个子组件的实例,从而一次性操作多个子组件的数据,这对于批量更新非常有用。

3.访问DOM元素

除了组件实例,$refs也可以用来获取原生DOM元素的引用,使得开发者可以直接操作DOM元素的属性和方法。

4.组合式API支持

在Vue3的组合式API中,虽然不能直接使用this关键字,但可以通过getCurrentInstance方法来间接获取$refs。

二.parent

1.访问父组件实例

$parent允许子组件直接访问其父组件的实例,这为子组件提供了一种方式来调用父组件的方法或修改父组件的数据。

2.破坏封装性

虽然$parent提供了强大的功能,但它也可能导致组件间的紧耦合,破坏了组件的封装性和复用性。因此,官方推荐使用props和自定义事件来实现父子组件间的通信。

3.defineExpose使用

在Vue3中,为了安全地暴露父组件的数据和方法给子组件,可以使用defineExpose宏,这是一种更可控且类型友好的方式。

4.限制使用场景

由于$parent可能导致代码难以维护和理解,它通常不建议作为首选的通信方式,特别是在大型应用中。

三.使用

1.父组件

2.子组件

四.代码

1.父组件代码

<template><div class="father"><h4>父组件</h4><h4>父亲的房:{{ house }}</h4><button @click="changeCar">修改子的车</button><son ref="s"/></div>
</template><script setup lang="ts" name="father">import { ref } from "vue";import son from "../components/son.vue";let s = ref()let house = ref('檀宫')function changeCar(){s.value.car = '奔驰'}//暴露属性defineExpose({house})</script><style scoped>
.father{background-color: orange;
}
h4{margin-left: 20px;font-size: 20px;
}</style>

2.子组件代码

<template><div class="son"><h4>子组件</h4><h4>子的汽车:{{ car }}</h4><button @click="changeHouse($parent)">传输数据给父</button></div>
</template><script setup lang="ts" name="father">import { ref } from "vue";let car = ref('宝马')function changeHouse(parent:any){parent.house = '汤臣一品'}defineExpose({car})</script><style scoped>
.son{background-color: skyblue;
}
h4{margin-left: 20px;font-size: 20px;
}</style>

五.效果

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词