vue3组件通信defineProps、defineEmits、defineExpose

前言

        vue最大的特点就是组件化开发,那么在组件开发时必定会用到父子传值,在vue2中我们用到了props、emit、ref、vuex、插槽等等获取组件的数据,那么vue3中必定要认识一下这三兄弟:defineProps、defineEmits、defineExpose(这里我用的是setup语法糖)。

父组件:

//-----------------------------------------------------------------------父组件
<template>
  <div>
    <!-- 内容 -->
    <level :list = list ref="levelw" @fatherData ="fatherDataClick"></level>
    <div>
      <button @click="btn">++</button>
    </div>
  </div>
</template>


<script setup lang="ts">
import { reactive,ref} from 'vue'

const levelw:any = ref(null)
const btn = () => {
  console.log(levelw.value.arrList.age);   //通过ref获取父组件的数据(需要defineExpose暴露一下)
}
const fatherDataClick = (v:Object) => {
  console.log(v);  //接收父组件事件传值
  
}


</script>




子组件:

​
//--------------------------------------------------------------------子组件
<template>
    
        <div>
          <span>{{ props.list.name }}</span>
          <button @click="emitsBtn">oooo</button>
        </div>
</template>
<script setup lang="ts">
import { ref, onMounted, reactive,toRefs,toRef,defineProps,defineEmits,defineExpose} from 'vue'

// 父传子
const props:any = defineProps({
  list:Object
})

// 子传父-----------------------自定义事件传值

const arrList:any = reactive({
    age: 18,
  number: 11, 
    hobby:"draw"
})
const emits = defineEmits(['fatherData'])
const emitsBtn = () => {
  emits('fatherData', arrList)
  console.log("dd");
  
}
// 子组件传值的数据需要暴露出去
defineExpose({
  arrList
})
</script >

​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值