vue3 父组件使用ref获取获取子组件的属性方法

在vue3中父组件访问子组件中的属性和方法是需要借助于ref:

1.<script setup> 中定义响应式变量 例如: const demo1 = ref(null)

2.在引入的子组件标签上绑定ref属性的值与定义的响应式变量同名( <demo1 ref="demo1"/>)。

父组件代码如下:

javascript 复制代码
<template>
  <demo1 ref="demo1"/>
  <demo2 ref="demo2"/>
  <demo3 ref="demo3"/>
</template>
<script setup>
import Demo1 from '@/components/demo1.vue'
import Demo2 from '@/components/demo2.vue'
import Demo3 from '@/components/demo3.vue'
import {ref,onMounted} from 'vue'

const demo1 = ref(null)
const demo2 = ref(null)
const demo3 = ref(null)
onMounted(()=> {
  console.log(demo1.value.count,'demo1子组件')
  console.log(demo2.value?.a,'demo2子组件')
  console.log(demo3.value.list[0],"demo3子组件")
})
</script>

子组件代码如下:

demo1.vue
javascript 复制代码
<template>
  <h1>i'm demo1 content{{count}}</h1>
</template>

<script >
import {ref} from 'vue'
export default {
    setup () {
        const count = ref(999)
        return {
            count
        }
    }
}

此时父组件可以获取到子组件的count属性

demo2
javascript 复制代码
<template>
  <h1>我是demo2</h1>
</template>

<script setup>
import {defineExpose,ref} from 'vue'
const a = ref('helloss')
</script>

当使用 <script setup> 写法会导致父组件无法访问到子组件中的属性和方法。

使用 <script setup> 的组件,想要让父组件访问到它的属性和方法需要借助与defineExpose来指定需要暴露给父组件的属性。

更改后的demo2组件
javascript 复制代码
<template>
  <h1>我是demo2</h1>
</template>

<script setup>
import {defineExpose,ref} from 'vue'
const a = ref('helloss')
defineExpose({
    a
})
</script>
demo3
javascript 复制代码
<template>
  <h1>我是demo3</h1>
</template>

<script>
export default {
  data () {
    return {
        list:['a','b','c']
    }
  },
  methods: {
    btn () { 
    }
  }
}

这种方式,父组件可以正常获取到里面的属性和方法。

相关推荐
掘金安东尼7 小时前
让 JavaScript 更容易「善后」的新能力
前端·javascript·面试
掘金安东尼8 小时前
用 HTMX 为 React Data Grid 加速实时更新
前端·javascript·面试
灵感__idea9 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
yinuo10 小时前
轻松接入大语言模型API -04
前端
袋鼠云数栈UED团队11 小时前
基于 Lexical 实现变量输入编辑器
前端·javascript·架构
cipher11 小时前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
UrbanJazzerati11 小时前
非常友好的Vue 3 生命周期详解
前端·面试
AAA阿giao11 小时前
从零构建一个现代登录页:深入解析 Tailwind CSS + Vite + Lucide React 的完整技术栈
前端·css·react.js
兆子龙12 小时前
像 React Hook 一样「自动触发」:用 Git Hook 拦住忘删的测试代码与其它翻车现场
前端·架构
兆子龙13 小时前
用 Auto.js 实现挂机脚本:从找图点击到循环自动化
前端·架构