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> 组件中要暴露出去的属性。

相关推荐
异界蜉蝣10 小时前
React Fiber架构:Diff算法的演进
前端·react.js·前端框架
追梦_life10 小时前
localStorage使用不止于getItem、setItem、removeItem
前端·javascript
全栈陈序员10 小时前
请描述下你对 Vue 生命周期的理解?在 `created` 和 `mounted` 中请求数据有什么区别?
前端·javascript·vue.js·学习·前端框架
无限大610 小时前
用三行代码实现圣诞树?别逗了!让我们来真的
前端·javascript
init_236110 小时前
label-route-capability
服务器·前端·网络
拉姆哥的小屋10 小时前
深度剖析SentiWordNet情感词典:155,287单词的情感世界
前端·javascript·easyui
T___T10 小时前
从 0 搭建 React 待办应用:状态管理、副作用与双向绑定模拟
前端·react.js·面试
林太白10 小时前
vue3这些常见指令你封装了吗
前端·javascript
Tzarevich10 小时前
算法效率的核心:时间复杂度与空间复杂度
javascript·算法
傻啦嘿哟10 小时前
Python在Excel中创建与优化数据透视表的完整指南
java·前端·spring