defineExpose暴露子组件的属性及方法

1. defineExpose 的概念

defineExpose 是 Vue 3 的 Composition API 中一个新的实用函数,用于在 <script setup> 语法下显式暴露组件的公共属性和方法

这在处理子组件时特别有用,允许父组件访问子组件的特定属性或方法

在 Vue 3 中,当我们使用 <script setup> 语法糖时,组件默认不会自动暴露内部的任何状态或方法给外部使用,为了显式暴露某些属性或方法,可以使用 defineExpose

2. defineExpose如何使用

2.1 实现

实现代码:

2.1.1《demo-child》页面

复制代码
<template>
	<view class="out">
		子组件
	</view>
</template>

<script setup>
	import {
		ref
	} from "vue"
	const count = ref(100)

	defineExpose({
		count,
		str:"vue3"
	})
</script>
<style lang="scss">

</style>

父组件通过模板引用的方式获取到当前组件的实例

获取到的实例会像这样 { count,b: "vue3" } (ref 会和在普通实例中一样被自动解包)

2.1.2《demo5》页面

复制代码
<template>
	<view>
		<demo-child ref="child"></demo-child>
	</view>
</template>

<script setup>
	import {
		onMounted,
		ref
	} from "vue"

	const child = ref(null);
	
	onMounted(()=>{
		console.log(child.value);
	})
</script>

<style lang="scss" scoped>

</style>

这边直接使用onMounted来进行接收,最后输出到控制台来看看结果

在这个地方就可以找到刚刚传递的count的value值和str的值了

2.2 调用方法实现改变值

2.2.1 《demo-child》页面

复制代码
<template>
	<view class="out">
		子组件count值:{{count}}
	</view>
</template>

<script setup>
	import {
		ref
	} from "vue"
	const count = ref(100);
	const updateCount=function(){
		count.value++;
	}

	defineExpose({
		count,
		str:"vue3",
		updateCount
	})
</script>
<style lang="scss">

</style>

在这里只需要添加一个方法updateCount,并且将它传递过去,在页面中输出一下就可以了

2.2.2《demo5》页面

复制代码
<template>
	<view class="out">
		<demo-child ref="child"></demo-child>
		<view>----</view>
		<button @click="update">点击修改子值</button>
	</view>
</template>

<script setup>
	import {
		onMounted,
		ref
	} from "vue"

	const child = ref(null);
	const update=function(){
		child.value.updateCount()
	}
	
	onMounted(()=>{
		console.log(child.value);
	})
</script>

<style lang="scss" scoped>
	.out{
		padding: 20px;
		background-color: #eee;
	}
</style>

在这里加上一个按钮,每次点击的时候调用child的方法updateCount方法

这样就可以实现每次点击时数字加一的效果

因为在控制台中输出了对象, 所以现在可以看一下结果

count的value值变成了110

而updateCount这个方法也显示在上面

3.总结

使用 <script setup> 的组件是默认关闭的------即通过模板引用或者 $parent 链获取到的组件的公开实例,不会暴露任何在 <script setup> 中声明的绑定。

相关推荐
FuckPatience1 小时前
Vue ASP.Net Core WebApi 前后端传参
前端·javascript·vue.js
一枚前端小能手2 小时前
🔥 SSR服务端渲染实战技巧 - 从零到一构建高性能全栈应用
前端·javascript
Komorebi_99992 小时前
Vue3 provide/inject 详细组件关系说明
前端·javascript·vue.js
不一样的少年_2 小时前
【前端效率工具】:告别右键另存,不到 50 行代码一键批量下载网页图片
前端·javascript·浏览器
Asort2 小时前
JavaScript设计模式(八):组合模式(Composite)——构建灵活可扩展的树形对象结构
前端·javascript·设计模式
木觞清2 小时前
喜马拉雅音频链接逆向实战
开发语言·前端·javascript
一枚前端小能手2 小时前
「周更第6期」实用JS库推荐:InversifyJS
前端·javascript
叉歪2 小时前
纯前端函数,一个拖拽移动、调整大小、旋转、缩放的工具库
javascript
Hilaku2 小时前
"事件委托"这个老古董,在现代React/Vue里还有用武之地吗?
前端·javascript·vue.js
向葭奔赴♡3 小时前
前端框架学习指南:提升开发效率
前端·javascript·vue.js