vue3(nuxt3)中使用ref获取不到子组件变量

vue2中调用子组件中的方法,可以直接 this.$refs.child 就可以获取到子组件,再继续 .a 就可以获取到child组件中的变量a。

到vue3中,这个方式有所改变:

html 复制代码
<!-- Parent.vue -->
<template>
  <div>
    <h1>Parent</h1>
    <Child ref="child" />
  </div>
</template>
<script setup>
import Child from './Child.vue'
const child = ref(null) // ref 是一个响应式的变量,它指向了 Child 组件的实例
child.value.doSomething() // 获取child中的方法
console.log(child.value.a)
</script>

<!-- Child.vue -->
<template>
  <div>
    <h1>Child</h1>
  </div>
</template>
<script setup>
const a = ref(1)
function doSomething() {
  console.log('do something')
  a.value++
}
defineExpose({ // 重点:需要expose暴露出去对应的方法.变量同理
  a,
  doSomething
})

</script>

重点:child中的变量和方法,在使用setup语法糖时,必须使用defineExpose将需要的内容暴露出去。

官方文档:

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

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

相关推荐
Mr.Liu69 分钟前
小程序30-wxml语法-声明和绑定数据
前端·微信小程序·小程序
76756047910 分钟前
useDateFormat源码解析
前端·源码
Mintopia10 分钟前
Three.js粒子系统开发实战:从基础到性能优化
前端·javascript·three.js
Promise52011 分钟前
大屏"跑马灯" 长列表性能优化
前端·javascript
子玖11 分钟前
初始化项目前的准备
前端·javascript·vue.js
Mintopia11 分钟前
Three.js进阶实战:打造动态光影交互场景 ——结合环境光、聚光灯与相机控制的沉浸式体验
前端·javascript·three.js
贵州数擎科技有限公司12 分钟前
Threejs绘制小兩伞快拿去送给你的女神
前端
Carlos_sam13 分钟前
OpenLayers:封装Overlay的方法
前端·javascript
MariaH14 分钟前
Sequelize模型初探
前端·后端
树豪15 分钟前
跟着官网学 Lynx 之 搭建 Lynx todo-list app
android·前端