Vue3中使用setup通过ref获取子组件的属性

 更新时间:2022年07月28日 09:34:40   作者:小火车况且况且  
这篇文章主要介绍了Vue3中使用setup通过ref获取子组件的属性,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

setup通过ref获取子组件的属性

主要依赖defineExpose

子组件通过 defineExpose将数据抛出

<template>
  <div class="test-com">testCom</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const testText = ref('我是子组件的数据')
defineExpose({
  text: testText
})
</script>

父组件通过给子组件绑定ref 然后结合nextTick回调函数获取子组件的数据

<template>
  <div>
    <TestCom ref="getTestComRef" />
    {{ showText }}
  </div>
</template>
<script lang="ts" setup>
import { nextTick, ref } from 'vue'
import TestCom from './components/TestCom.vue'
const getTestComRef = ref<{
  text: string
}>()
const showText = ref()
nextTick(() => {
  showText.value = getTestComRef.value?.text
})
</script>

效果图

调用子组件的属性和方法

今天在写 vue3 项目时,需要在父组件里面调用子组件的方法,但是打印出来却是这个样子:

发现打印出来的数据啥都没有,难道是代码问题?

上代码:

父组件代码

<template>
  <son ref="sonRef"></son>
</template>
<script setup>
import { onMounted, ref } from "vue";
import Son from "./view/son.vue";
const sonRef = ref(null);
onMounted(() => {
  console.log(sonRef.value);
});
</script>

son 组件代码

<template>
  <div>子组件</div>
</template>
<script setup>
const a = "555";
const fn = () => {
  console.log("执行了fn");
};
</script>

通过翻阅 vue 文档发现文档中写着一个叫 defineExpose 的 api,是这样介绍的:

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

大致意思就是:使用 script setup 语法糖的组件,不会往外暴露任何在该语法糖中声明的变量,需要使用defineExpose 语法来将你想暴露出去的变量和方法暴露出去

son 组件代码修改后:

<template>
  <div>子组件</div>
</template>
<script setup>
const a = "555";
const fn = () => {
  console.log("执行了fn");
};
defineExpose({
  a,
  fn,
});
</script>

然后就可以在控制台看到我们在控制台打印出了子组件上变量和方法,然后就可以进行调用了

over,问题解决!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue+axios实现图片上传识别人脸的示例代码

    vue+axios实现图片上传识别人脸的示例代码

    本文主要介绍了vue+axios实现图片上传识别人脸,这里采用的是vant的文件上传组件,通过上传图片后端识别图片里的人脸,感兴趣的可以了解一下
    2021-11-11
  • Vue中监视属性和计算属性区别解析

    Vue中监视属性和计算属性区别解析

    这篇文章主要介绍了Vue中监视属性和计算属性区别,通过本文学习大家知道computed与watch配置项问题,computed能完成的功能,watch都可以完成,本文通过实例代码给大家详细讲解,需要的朋友可以参考下
    2022-10-10
  • 基于vue-cli3多页面开发apicloud应用的教程详解

    基于vue-cli3多页面开发apicloud应用的教程详解

    这篇文章主要介绍了基于vue-cli3多页面开发apicloud应用,本文采用vue-cli+APIcloud的方式写解决以上痛点,开发灵活,并且打包之后体积更小速度更快,需要的朋友可以参考下
    2019-06-06
  • VUE页面中加载外部HTML的示例代码

    VUE页面中加载外部HTML的示例代码

    本篇文章主要介绍了VUE页面中加载外部HTML的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • vue element-ui el-cascader级联选择器数据回显的两种实现方法

    vue element-ui el-cascader级联选择器数据回显的两种实现方法

    这篇文章主要介绍了vue element-ui el-cascader级联选择器数据回显的两种实现方法,具有很好的参考价值,希望对大家有所帮助。
    2023-07-07
  • Vue自定义组件中v-model的使用方法示例

    Vue自定义组件中v-model的使用方法示例

    日常开发中除了直接在input标签上使用v-model指令外,封装的组件也需要v-model,下面这篇文章主要给大家介绍了关于Vue自定义组件中v-model使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • vue后台系统管理项目之角色权限分配管理功能(示例详解)

    vue后台系统管理项目之角色权限分配管理功能(示例详解)

    这篇文章主要介绍了vue后台系统管理项目-角色权限分配管理功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • vue数组对象排序的实现代码

    vue数组对象排序的实现代码

    这篇文章主要介绍了vue数组对象排序的实现代码,这里整理了详细的代码,非常具有实用价值,需要的朋友可以参考下
    2018-06-06
  • Vue中v-for的数据分组实例

    Vue中v-for的数据分组实例

    下面小编就为大家分享一篇Vue中v-for的数据分组实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Vue项目报错:Uncaught SyntaxError: Unexpected token <

    Vue项目报错:Uncaught SyntaxError: Unexpected token <

    这篇文章主要介绍了Vue项目报错:Uncaught SyntaxError: Unexpected token <,在引入第三方依赖的 JS 文件时,遇到的一个问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11

最新评论