关于vue3.2中父组件调用子组件的方法

博客介绍了Vue2和Vue3中父子组件传值及方法调用的不同。Vue2在父组件调用子组件元素上添加属性,子组件在props中调用值。Vue3添加了defineProps、defineExpose新Api,引入组件后可直接使用,还说明了如何让父组件调用子组件方法。

我们都知道在vue2中父子组件传值直接在父组件调用子组件的元素上添加相应的属性,然后再在子组件中的props中调用父组件传过来的值即可。

但是在vue3中略有不同,添加了两个新Api defineProps、defineExpose

1、首先在父组件中引入并且调用子组件,这里需要注意一下,在vue3中不需要再在components对象中定义组件,直接引入之后直接使用就可以了

// 父组件
// 引入组件
<script setup>
import DialogAddSwiper from '@/components/DialogAddSwiper.vue'
</script>

<template>
<DialogAddSwiper ref="addGood" :reload="getCarousels" :type="state.type" />
</template>

2、然后在子组件中接收父组件传过来的值

// 子组件
<script setup>
// defineProps 方法的使用
const props = defineProps({
  type: String,
  reload: Function,
  configType: Number
});
</script>

至此,父组件调用子组件的值是没有问题了,但是却无法使用子组件中定义的方法,这时候就需要在子组件中引入一个Api
比如在父组件中使用一个子组件的方法

// 父组件
// 定义了一个addGood 实例
const addGood = ref(null);

// 这里使用了addGood 的open方法,但是这样直接使用是没法使用的
const handleAdd = () => {
    state.type = "add";
    addGood.value.open();
}

// 这时候就需要在子组件中暴露出open这个方法来供父组件使用
// 子组件
// 定义了 open 方法
const open = (id) => {
    state.visible = true
    console.log(id, '到底有没有获取到');
    if(id) {
        state.id = id
        getDetail(id)
    } else {
        state.ruleForm = {
            name: '',
            id: '',
            link: '',
            sort: ''
        }
    }
}

// 然后需要在 defineExpose 这个函数中将这个open方法暴露出去供父组件调用
defineExpose({ open });

至此,父组件就传值给了子组件并且也成功的调用了子组件的方法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值