vue3 使用defineExpose的实例详解

 更新时间:2023年03月18日 08:37:14   作者:冷风风  
这篇文章主要介绍了vue3 使用defineExpose的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

可以通过 defineExpose 编译器宏来显式指定在 <script setup> 组件中要暴露出去的属性:

<script setup>
import { ref } from 'vue'

const a = 1
const b = ref(2)

defineExpose({
  a,
  b
})
</script>

当父组件通过模板引用的方式获取到当前组件的实例,获取到的实例会像这样 { a: number, b: number } (ref 会和在普通实例中一样被自动解包)

例子

父组件

<template>
  <h2>defineExpose 使用 父组件</h2>
  <child ref="getChildData"></child>

</template>

<script setup lang="ts">
import Child from "@/components/exposeChildren.vue"
import { ref,onMounted,toRaw} from 'vue'
    // 文档说setup写在script上组件是关闭的
    // 也就是说父组件使用getChildData.xxx访问不到子组件的数据
    // 此时我们需要用defineExpose把需要传递的数据暴露出去,这样外部才能访问到
    // 同理也可以接收外部传来的值

const getChildData = ref(null)
const obj = {
    name: 'alan',
    desc: '大笨蛋',
    age: 18
}

const cc= getChildData.value?.['num']
console.log(cc) //undefined,此时还未找到子组件暴露的数据

onMounted(()=>{
  //获取子组件的data数据,什么时候获取根据自己业务来
  const bb:any= getChildData.value?.['updata']
  console.log(bb()) // 123,这时候得到的是子组件的初始值,因为还未给子组件传递数据
  const a:any= getChildData.value?.['getData'] 
  a(obj) ////给子组件传递数据
  const b:any= getChildData.value?.['updata']
  const c= getChildData.value?.['num']
  console.log(toRaw(b())) // {name: 'alan', desc: '大笨蛋', age: 18} ,这里得到的是个proxy,所以需要toRaw()方法转成对象 
  console.log(c) // 666
})


</script>
<style scoped>
</style>

子组件

<template>
  <h2>defineExpose 使用 子组件</h2>
  <div>{{ data }}</div>
</template>

<script setup lang="ts">
import { ref, defineExpose } from 'vue'

const data = ref(123)
const num = ref(666)
defineExpose({
    updata(){
        return data.value //暴露出去父组件可以拿到data的数据.此时值为123
    },
    getData(res:any){
        data.value = res //父组件传递来的值赋值给data
        // 此时的data变成了 Proxy
        //     {
        //     name: 'alan',
        //     desc: '大笨蛋',
        //     age: 18
        //     }
    },
    num
})
</script>
<style scoped>
</style>

到此这篇关于vue3 使用defineExpose的文章就介绍到这了,更多相关vue3 使用defineExpose内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在Vue中使用icon 字体图标的方法

    在Vue中使用icon 字体图标的方法

    这篇文章主要介绍了在Vue中使用icon 字体图标的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • Vue在项目中如何引入本地Json数据

    Vue在项目中如何引入本地Json数据

    这篇文章主要介绍了Vue在项目中如何引入本地Json数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)

    Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)

    下面小编就为大家带来一篇Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • vue watch如何深度监听数组每一项的变化

    vue watch如何深度监听数组每一项的变化

    这篇文章主要介绍了vue watch如何深度监听数组每一项的变化问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • vue项目打包部署到nginx后css样式失效的问题及解决方法

    vue项目打包部署到nginx后css样式失效的问题及解决方法

    我将自己的前端Vue项目,经过build生成的dist文件夹copy到nginx的html文件夹中,然后写了配置文件,运行访问后发现页面css样式没有加载到,下面给大家介绍vue项目打包部署到nginx后css样式失效的问题及解决方法,感兴趣的朋友一起看看吧
    2024-12-12
  • vue-devtools 打开源码位置实现过程

    vue-devtools 打开源码位置实现过程

    这篇文章主要为大家介绍了vue-devtools 打开源码位置实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Vue实现contenteditable元素双向绑定的方法详解

    Vue实现contenteditable元素双向绑定的方法详解

    contenteditable是所有HTML元素都有的枚举属性,表示元素是否可以被用户编辑。本文将详细介绍如何实现contenteditable元素的双向绑定,需要的可以参考一下
    2022-05-05
  • 阿望教你用vue写扫雷小游戏

    阿望教你用vue写扫雷小游戏

    这篇文章主要介绍了阿望教你用vue写扫雷小游戏,本文通过实例代码效果图展示的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • vue项目打包发布到Nginx后无法访问后端接口的解决办法

    vue项目打包发布到Nginx后无法访问后端接口的解决办法

    这篇文章主要给大家介绍了关于vue项目打包发布到Nginx后无法访问后端接口的解决办法,记录一下项目需要注意的地方,方便以后快速使用,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • Vue echarts@4.x中国地图及AMap相关API使用详解

    Vue echarts@4.x中国地图及AMap相关API使用详解

    这篇文章主要为大家介绍了Vue使用echarts@4.x中国地图及AMap相关API使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论