Vue3中defineProps、defineEmits和defineExpose

1,300 阅读1分钟

defineProps:子组件接收父组件传来的
defineEmits:子组件接收父组件传来的方法
defineExpose:子组件暴露自己的属性或方法

defineProps、defineEmits

//父组件
<template>
  <Tab
      :page="page"    //传递值
      @pageFn="pageFn"  //传递方法
  ></Tab>
</template>

<script setup>
import Tab from "../../components/freight/Tab.vue";
import { ref, reactive, toRefs, onMounted } from "vue";

const page=ref(1)
const pageFn=(val)=>{
    page.value=val
}
</script>

//子组件
<template>
  <button @click="butFn">改变page值:{{page}}</button>
</template>

<script setup>
import { ref, reactive, toRefs, defineProps, defineEmits } from "vue";

defineProps(["page"]);  //接收父组件传来的值
const emit = defineEmits(["pageFn"]);   //定义一个变量来接收父组件传来的方法

const butFn=()=>{
    // 触发父组件中的 pageFn 方法,并传入参数5
    emit("pageFn",5)
}
</script>

defineExpose

// 父组件
<template>
  <Child ref="RefChildExpose"></Child>
  <button @click="touchButton">点击使用子组件</button>
</template>
<script setup>
const RefChildExpose = ref(null)
function touchButton () {
  // 使用子组件方法
  RefChildExpose.value.show()
  // 输出子组件属性
  console.log(RefChildExpose.value.count)
}
</script>

// 子组件
<script setup>
import { defineExpose } from "vue"
function show () {
  console.log('显示')
}
defineExpose({
  show,
  count: 1
})
</script>