Vue3 父子传值

本文详细介绍了Vue中父子组件之间的数据传递方法,包括父组件如何通过props将数据传给子组件,子组件如何通过defineProps接收,以及子组件如何通过自定义事件将数据传递回父组件,并演示了父组件通过ref访问子组件内部属性的实现。此外,还展示了在TypeScript环境中如何使用withDefaults和defineEmits进行类型检查。
摘要由CSDN通过智能技术生成

父子传值

1、父传子:父组件绑定一个数据,子组件通过defineProps接收

父组件:父组件中通过绑定数据传给子组件

<template>
    <div>
        <table border cellspacing="0" style="width: 800px; border-collapse: collapse">
        	<!-- 父组件中通过绑定数据传给子组件 -->
            <Theader :headerList="hList.title" />
            <Tbody ref="tbody" :list="list" :total="$total" @del="del" />
        </table>
    </div>
</template>

子组件:子组件通过defineProps来接收,无需引入直接使用

<script setup lang="ts">
type Props = {
    headerList?: string[];
};
// 子组件通过defineProps来接收,无需引入直接使用
//defineProps<Props>()

// ts定义接收参数默认值
withDefaults(defineProps<Props>(), {
    // 不能直接这样赋值
    // headerList: ['str', '12str', 'str', 'str'],
    headerList: () => ['str', '12str', 'str', 'str'],
});
</script>

2、子传父

父组件:绑定自定义事件传递给子组件

<template>
    <div>
        <table border cellspacing="0" style="width: 800px; border-collapse: collapse">
            <Theader :headerList="hList.title" />
            <!-- 父组件中绑定自定义事件传递给子组件 -->
            <Tbody ref="tbody" :list="list" :total="$total" @del="del" />
        </table>
    </div>
</template>

子组件:通过defineEmits 注册了一个自定义事件,触发emit去调用注册的事件,然后传参

<script setup lang="ts">
//const emit = defineEmits(['自定义事件名称']);返回一个函数
const emit = defineEmits(['del']);
const handleDel = (index: number) => {
	// emit('自定义事件名称', 参数);
    emit('del', index);
};
</script>

3、父组件通过ref去获取子组件中的内部属性

父组件:通过ref获取子组件实例

<template>
    <div>
        <table border cellspacing="0" style="width: 800px; border-collapse: collapse">
            <Theader :headerList="hList.title" />
            <!-- 父组件中通过ref获取子组件实例 -->
            <Tbody ref="tbody" :list="list" :total="$total" @del="del" />
        </table>
    </div>
</template>

子组件:

// 父组件若想通过ref获取子组件中定义的属性,或者一些方法要通过defineExpose
const list = reactive({
    name: 'string',
});
defineExpose({
    list,
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hoki802

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值