Vue3—组件传值defineProps、defineEmits

6,331 阅读1分钟

defineProps

作用:父组件向子组件传值,子组件通过defineProps接收该值。

//父组件index.vue
<template>
    <div>parent</div>
    <son :value1="toSonValue" :method1="toSonMethod" />   //声明变量value1,绑定父组件的变量名toSonValue
</template>
    
<script setup lang='ts'>
import { ref } from 'vue';
import son from './son.vue';            
const toSonValue = ref('toSonValue');   
const toSonMethod = () => {             
    console.log('toSonMethod');
}
</script>

//子组件son.vue
<template>
    <div>son</div>
    <div>{{ value1 }}</div>
</template>
    
<script setup lang='ts'>
import { onMounted } from 'vue';

// 父组件往子组件传值value1,method1,其中method1是可选的
const props = defineProps<{      //子组件通过defineProps接收父组件传过来的value1和method1
    value1: string,              
    method1?: () => void         //可选的
}>()
onMounted(() => {
    props.method1!(); // toSonMethod
})
</script>

defineProps步骤:

1.新增一个子组件son.vue

2.在父组件通过import son from './son.vue'; 引入子组件

3.在父组件中声明变量toSonValue和toSonMethod

4.在父组件引入的子组件标签中,声明变量value1、method1,来绑定父组件toSonValue、toSonMethod两个变量名

5.在子组件中,声明变量props,该变量通过defineProps接收父组件传过来的value1和method1

defineEmits

作用:子组件向父组件传值,通过defineEmits触发父组件的自定义事件进行传值。

//子组件son.vue
<template>
    <div @click="sonClick">son</div>    //1.对son进行事件绑定
</template>
<script setup lang='ts'>
// defineEmits 定义子组件的自定义事件,及参数
const emit = defineEmits<{             //3.emit函数通过defineEmits 定义子组件的事件名和参数类型去触发父组件的自定义事件getSonValue
    (e: 'sonSelfEvent', sonValue: string): void    //返回一个void类型的数据
}>()
const sonClick = () => {                //2.当点击son,将会执行sonClick()
    emit('sonSelfEvent', 'sonValue')    //此处是自定义的事件名及参数
}
</script>

//父组件index.vue
<template>
    <div>parent</div>
    <son @son-self-event="getSonValue" />    //对父组件自定义的getSonValue()进行事件绑定
</template>
    
<script setup lang='ts'>
import son from './son.vue';
const getSonValue = (value: string) => {   //4.触发父组件的自定义事件getSonValue
    console.log(value); // sonValue        //接收子组件传过来的value值并将它打印出来
}
</script>

defineEmits步骤:

1.新增一个子组件son.vue

2.在父组件通过import son from './son.vue'; 引入子组件

3.在父组件中声明自定义事件getSonValue

4.在父组件引入的子组件标签中,声明变量son-self-event,来绑定父组件自定义的getSonValue()方法

5.在子组件中,声明变量emit,该变量通过defineEmits定义子组件的事件名和参数类型去触发父组件的自定义事件getSonValue(即:defineEmits接收父组件传过来的getSonValue()方法)

6.在子组件中,声明sonClick方法对son进行事件绑定

7.当点击son,将会执行sonClick方法里,emit函数自定义的事件名及参数

注意:在Vue3中不需要对defineProps、defineEmits进行引入,直接使用即可。