首页 > 其他分享 >vue3怎么使用defineExpose

vue3怎么使用defineExpose

时间:2023-08-10 17:55:55浏览次数:34  
标签:getChildData const defineExpose vue3 value num 使用 组件

在使用单文件组件<script setup>创建一个子组件,会遇到父组件需要调用子组件的方法或变量的情况,这个时候,子组件中就需要使用defineExpose把子组件中那些需要被父组件调用的方法或变量给输出,方便父组件使用。

 

1.子组件

在子组件中,定义updata方法、getData方法、num变量

<template>
  <h3>defineExpose 使用 子组件</h3>
  <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>

子组件中的updata方法、getData方法、num变量,通过defineExpose导出,方便父组件来使用。

2.父组件

<template>
  <h3>defineExpose 使用 父组件</h3>
  <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>

父组件中,在子组件的代码上定义ref="getChildData",通过如下方式:

  const getChildData = ref(null)
  getChildData.value.updata()getChildData.value?.["uodata"]()
  getChildData.value.getData()getChildData.value?.["getData"]()
  getChildData.value.numgetChildData.value?.["num"]

来调用子组件中导出来的方法和变量

 

标签:getChildData,const,defineExpose,vue3,value,num,使用,组件
From: https://www.cnblogs.com/pwindy/p/17621098.html

相关文章

  • 如何使用HTTP代理IP抓取数据
    在进行数据抓取时如何使用HTTP代理IP的呢?主要有以下四种方法:1、获取可用的HTTP代理IP:可以通过购买私密HTTP代理IP或使用公开的HTTP代理IP网站来获取可用的HTTP代理IP。确保获取的代理IP列表是有效且稳定的。2、设置HTTP代理IP:在爬虫程序中,使用合适的库(如requests、urllib等)发送请求......
  • AI模型部署&推理进阶教程:使用CSK6视觉开发套件拍照并进行物体识别
    前言在已发布的《CSK6AI模型部署教程》系列文章中,我们实现了将训练的LNN模型在CSK6芯片上运行的完整流程:将一张苹果的图片提取到的特征,并打包到了固件里面,然后在固件里去将它送给thinker模型去进行推理,得出一个苹果的一个推理结果。在以往分享的示例中我们的thinker模型是打包WAS......
  • 使用Aspose.BarCode,在 Python 中扫描条码
    条形码是机器可读的数据表示形式,由平行线或几何图案直观地表示。它们提供了一种快速准确的方法来存储和检索信息,例如产品详细信息、库存代码或跟踪号码。条形码有多种类型,包括UPC、EAN、QR码等。每种类型都有特定的结构和编码机制。在这篇博文中,我们将学习如何构建高性能的Python......
  • 歌词字幕制作——文字工具使用
    按住Alt复制到上面的轨道把上面的改成黄色的在文本上面打上蒙版然后给蒙版的位置加上关键帧......
  • 项目vue2升级vue3
    Vue2迁移vue3操作指南#一、前言有个自动化迁移工具gogocode-cli,尝试后发现不好用且得不偿失,就放弃了,感兴趣的可以去了解一下,本指南选择手动迁移迁移开始之前,我们先来梳理下思路:现在有一个vue2的项目,首先我们升级框架,得到了一个vue3的框架,但是上面放着vue2的代码,跑不起来,然后我......
  • ubuntn22.0 LVM罗辑卷管理分区使用,把多块硬盘容合成一个空间
    一、理解他的概念LVM2(LogicalVolumeManagement2)是Linux系统中的一种逻辑卷管理技术,是对LVM的第二个主要版本。LVM2相比于早期版本的LVM,提供了更多的功能和改进。物理扩展卷(PhysicalExtend PE)-----------这个实际是把物理磁盘格式化后,变成一小块一小块的空间,默认是4M,然后方......
  • 使用keil生成 .bin 文件
    产品结构设计没有预留SW烧录口,导致每次更新程序都要拆壳烧录,要不就是引一根烧录线出来,这种方式导致外观非常不美观,产品展示或演示给人第一印象就不好,刚好产品有串口接口,就打算使用IAP功能升级软件;IAP需要生产BIN文件更新软件,而之前工程生成的都是HEX文件再烧录; 1.hex文件与bin......
  • 6.Filebeat的安装及收集日志到Elasticsearch并使用自定义索引
    利用Filebeat收集日志Filebeat是用于转发和集中日志数据的轻量级传送程序.作为服务器上的代理安装,Filebeat监视指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或Logstash进行索引.Logstash也可以直接收集日志,但需要安装JDK并且会占用至少500M以上的内存生产......
  • Android使用Rxjava获取本地存储的txt文件
    废话不多说,直接上代码:publicclassReadLocalFileActivityextendsAppCompatActivity{privateListViewlistView;privateList<File>files=newArrayList<>();privateArrayAdapteradapter;@OverrideprotectedvoidonCreate(@Nullab......
  • 在 Python 中使用 Pygal 绘制世界地图
    在Python的Pygal库的帮助下,我们可以在Python中创建令人惊叹的世界地图,因为它提供了不同的功能来创建和自定义图形。本文探讨了绘制世界地图、自定义地图样式、添加数据以突出显示国家或地区以及将地图呈现为SVG文件的分步过程。无论您是想可视化地理数据、展示国际统计数据......