Vue3通过ref获取子组件信息
2022-09-03发布
|

Vue3 中通过 ref 访问元素节点与 Vue2 不太一样,vue2中是通过this.$refs的方式获取的。vue3中没有this,是通过声明变量的方式获取ref的。我们来看看代码中是如何实现的吧

子组件代码

<template>
  <div>{{ message }}</div>
</template>

<script lang="ts" setup>
import { ref } from "vue"
const message = ref<string>("我是子组件")
const onChange = () => {}
defineExpose({
  message,
  onChange
});
</script>

子组件可以通过defineExpose 方法暴露数据。

父组件代码


<template>
  <child ref="childRef"></child>
</template>
<script setup lang="ts">
import { onMounted, ref } from "vue";
import child from "./child.vue";
const childRef = ref<any>(null);
onMounted(() => {
  console.log(childRef.value); // child 组件实例
  console.log(childRef.value.message); // undefined
});
</script>    

上段代码中我们给子组件添加了ref属性,为了获取到这个元素,我们声明了一个与 ref 属性名称相同的变量 childRef 。通过childRef.value获取子组件的信息

注意点:

  • 变量名称必须要与 ref 命名的属性名称一致。
  • 通过 childRef.value 的形式获取 DOM 元素。
  • 必须要在 DOM 渲染完成后才可以获取 childRef.value,否则就是 null。
------------ END ------------