关于日期组件,短短的一天已经遇到两个坑了
平时都是拿来即用,这次真让我印象深刻了
bug1:保存后回显的时候出不来
正常配置一个列表加一个弹窗,新增修改共用一个弹窗
日期组件如果有开始和结束两块,一般后端会给你两个字段去接值。
v-model绑的是数组,这个数组可以自定义,就自己用,不用传给后端的
在change事件里给后端要的两个字段赋值
<el-date-picker
v-model="form.dateTime"
@change="dataChange"
type="daterange"
value-format="yyyy-MM-dd"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
dateTime可以单独定义,我这是因为涉及到必填项了,所以放在表单里
form: {
dateTime: [],
},
//给后端要的两个字段赋值
dataChange(val) {
if (val && val.length > 0) {
this.form.startDate = val[0];
this.form.endDate = val[1];
}
},
然后就说回显的事了,普通的赋值对日期组件不起作用,直接上this.$set
this.$set(this.form, "dateTime", [
"" + row.startDate + "",
"" + row。endDate + "",
]);
bug2
一样的日期组件,但是需求是刚开始的时候给开始日期赋当天的默认值
我又卡住了, s e t 都不好使了,就是不触发,网上搜到一个办法,说不用 set都不好使了,就是不触发,网上搜到一个办法,说不用 set都不好使了,就是不触发,网上搜到一个办法,说不用set,用push追加,我也试了,还是不行,后来才发现我掉坑里去了,需求说只要开始日期赋值,我就只考虑开始日期了
其实日期范围组件,开始和结束都要有值
我给结束日期赋空值,难怪怎么都折腾不出来,望大家不踩这个坑
this.$set(this.form.dateTime, 0, formdate);
this.$set(this.form.dateTime, 1, formdate);
或
this.form.dateTime.push(formdate);
this.form.dateTime.push(formdate);
写两遍一样的挺奇怪的,就用$set吧