Vue3+ts的setup()函数和<script setup>通过ref获取子组件值和方法的两种用法

一、setup()函数通过ref获取子组件的值或方法

父组件

<template>
    <div>
      <Child ref="childRef" />
    </div>
</template>
<script lang="ts">
import { onMounted, ref, reactive, nextTick, toRefs, computed, provide } from 'vue';
import Child from './components/Child.vue'; //引入子组件
export default {
  components: {
    Child,
  },
  setup() {
    const childRef = ref();//定义子组件的ref
    
    //打印子组件的ref的值
    function getChildRefValue(value) {
      console.log(childRef.value);
    }
    onMounted(() => {
      console.log('子组件ref对象',childRef.value);
      console.log('获取子组件的childValue值',childRef.value.childValue);
      console.log('调用子组件的childFunction方法',childRef.value.childFunction);
    });

    return {
      getChildRefValue,
      childRef,//记得要返回子组件的ref,不然访问不到
    };
  },
};
</script>

子组件

<script lang="ts">
import { onMounted, ref, reactive, nextTick, toRefs, computed, provide } from 'vue';
export default {
  setup() {
    const childValue=ref('我是子组件的的值')
    
    //打印子组件的ref的值
    function childFunction() {
     console.log('我是子组件的方法');
    }

    return {
      childValue,
      childFunction,
    };
  },
};
</script>

二、<script setup>通过ref获取子组件的值或方法

父组件

<template>
    <div>
      <Child ref="childRef" />
    </div>
</template>

	<script setup lang="ts">
import { onMounted, ref, reactive, nextTick, toRefs, computed, provide } from 'vue';
import Child from './components/Child.vue'; //引入子组件

const childRef = ref(); //定义子组件的ref

onMounted(() => {
      console.log('子组件ref对象',childRef.value);
      console.log('获取子组件的childValue值',childRef.value.childValue);
      console.log('调用子组件的childFunction方法',childRef.value.childFunction);
});
</script>

子组件

<script setup lang="ts">
import { ref, computed, watch, watchEffect, defineEmits, defineProps, withDefaults, inject } from 'vue';
/* 定义被父组件可以访问的值或方法 start */
const childValue = ref('我是子组件的值');
function childFunction() {
  console.log('我是子组件的方法');
}
/* 定义被父组件可以访问的值或方法 end */

/* 只有defineExpose暴露的值或方法才能被父组件通过ref访问 start */
defineExpose({
  childValue,
  childFunction,
});
/* 只有defineExpose暴露的值或方法才能被父组件通过ref访问 end */
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值