这里利用之前封装的elementPlus 日期区间组件来讲一下vue3组件之间的通信
父组件
<v-date-picker @itemChange="getChangeTime"/>
const getChangeTime = (e)=>{
//获取子组件传过来的值
//e[0]:开始日期
//e[1]:结束日期
}
子组件接收
vDatePicker.vue
<template>
<el-date-picker
v-model="Times"
type="daterange"
:range-separator="rangeName"
:start-placeholder="startName"
:end-placeholder="endName"
@change="getTime">
</el-date-picker>
</template>
<script>
import {ref} from "vue";
import utils from "../utils/utils.js"//这边主要做一个日期转换
export default {
props:{
rangeName:{
type:String,
default:'至'
},
startName:{
type:String,
default:'开始日期'
},
endName:{
type:String,
default:'结束日期'
},
},
setup(props,{ slots, attrs, emit }){
const Times = ref([]);
const getTime = ()=>{
if(Times.value && Times.value.length>0){
let arr =[utils.dateFormat(Times.value[0]),utils.dateFormat(Times.value[1])];
emit('itemChange', arr)//这里通过emit给父组件传值,itemChange
}else{
emit('itemChange', [])
}
}
return{
Times,
getTime
}
}
}
</script>
vue3语法糖写法(建议)
<script setup>
import {
ref,
} from "vue";
import utils from "../utils/utils.js"
defineProps({
rangeName: {
type: String,
default: '至'
},
startName: {
type: String,
default: '开始日期'
},
endName: {
type: String,
default: '结束日期'
},
})
const Times = ref([]);
const emit = defineEmits(['itemChange'])
const getTime = () => {
if (Times.value && Times.value.length > 0) {
let arr = [utils.dateFormat(Times.value[0]), utils.dateFormat(Times.value[1])];
emit('itemChange', arr)
} else {
emit('itemChange', [])
}
}
</script>