Vue3 第三十七篇:defineProps、defineEmits、defineExpose、provide / inject

1.父组件操作子组件:

defineProps:子组件接收父组件传参(使用场景:父组件向子组件传参)

// 父组件
<template>
  <Child :name="name"></Child>
</template>
 
 
//子组件
const props = defineProps({
  name: {
    type: String,
    default: ""
  }
});

defineEmits:子组件向父组件暴露事件(使用场景:父组件要调用子组件的方法)

// 父组件
<template>
  <Child  @getdata="getdata"></Child>
</template>
<script>
   const getdata = (e: string) => {
     console.log(e);
   };
</script>
 
//子组件
import { defineEmits } from "vue"
<template>
  <button @click="handleClick">暴露</button>
</template>
<script>
   const emits = defineEmits(["getdata"]);
   const handleClick = () => {
     emits("getdata", "子组件向父组件传递数据");
   };
</script>

defineExpose:父组件获取子组件的数据和方法(使用场景:父组件要调用子组件的数据或方法)

// 父组件
<template>
  <Child ref="childExpose"></Child>
  <button @click="handelcount">子组件暴露</button>
</template>
<script>
   // 拿到子组件实例
   const childExpose = ref();
   const handelcount = () => {
    //获取子组件的数据或方法
     console.log(childExpose.value.count);
   };
</script>
 
// 子组件
<script>
   //子组件将数据或方法暴露出去
   defineExpose({
     count: 1
   })
</script>

2.子组件操作父组件:

provide :父组件提供给子组件的数据或方法

<script setup>
import { provide } from 'vue'

//提供
provide("getList",getList)

function getList() {
    console.log(123456)
}
</script>
<template>
    <child/>
</template>

inject:子组件获取父组件提供的数据或方法

<script setup>
import { reactive, inject } from 'vue'

//获取
const getList = inject('getList')

//调用
getList()

</script>
<template>
</template>

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

文子阳

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

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

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

打赏作者

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

抵扣说明:

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

余额充值