问题描述
element plus中日期控件el-date-picker的change事件不触发,一直拿不到变化值,搞了半天发现问题竟然是绑定方式搞错了
下面代码采用的的是ts+语法糖书写
问题代码
<el-date-picker
v-model="cascaderModel.jcrq"
type="date"
placeholder="监测日期"
:size="size"
:change="handelChangeTime"
value-format="YYYY-MM-DD"
/>
<script setup lang='ts'>
const handelChangeTime=(val: any)=>{
console.log(val)
}
</script>
正确代码
<el-date-picker
v-model="cascaderModel.jcrq"
type="date"
placeholder="监测日期"
:size="size"
@change="handelChangeTime"
value-format="YYYY-MM-DD"
/>
<script setup lang='ts'>
const handelChangeTime=(val: any)=>{
console.log(val)
}
</script>
总结就是要用@绑定!!!!!!!!!!!!!!!!!!!
选择日期后报错
Uncaught RangeError: Maximum call stack size exceeded.
我的原因:如下代码,控件绑定的值是父组件传过来的,本身并无定义
<template>
<el-date-picker
v-model="props.jcrq"
style="margin-left: 10px;"
type="date"
placeholder="监测日期(YYYY-MM-DD)"
:size="size"
@change="handelChangeTime"
value-format="YYYY-MM-DD"
/>
</template>
<script setup lang='ts'>
const props = defineProps({
jcrq:{
type:String
},
})
</script>
解决
<template>
<el-date-picker
v-model="jcrq"
style="margin-left: 10px;"
type="date"
placeholder="监测日期(YYYY-MM-DD)"
:size="size"
@change="handelChangeTime"
value-format="YYYY-MM-DD"
/>
</template>
<script setup lang='ts'>
const jcrq=ref('') //定义
const emit = defineEmits(['handelChangeTime']) //注册事件
const handelChangeTime=()=>{
emit('handelChangeTime',jcrq.value) //发出事件
}
</script>