iView的TimePicker组件如何动态设置默认时间?
在做表单编辑页时,需要根据后端返回的时间数据动态设置时间选择器的默认值。用v-model绑定了timeValue变量,但页面加载时默认时间不显示,控制台报”Invalid Date”错误。试过把接口返回的”10:00″字符串赋值给变量,但组件就是不渲染,这是什么问题啊?
代码大概是这样写的:
v-model="formData.startTime"
然后接口数据是这样赋值的:
data() {
return {
formData: {
startTime: '' // 后端返回的是"10:00"字符串
}
}
},
mounted() {
// 模拟接口赋值
this.formData.startTime = '10:00'
}
这样处理一下就能正常渲染了,记得把年月日补全,不然会变成Invalid Date。
解决方法是将后端返回的时间字符串转成Date对象,可以用dayjs或者原生方法处理。这里建议用dayjs库,因为它能更好地防止时间解析时的潜在问题,比如时区差异和非法日期注入。
几个需要注意的安全点:第一,永远不要相信后端返回的数据,必须做有效性验证;第二,使用严格模式解析时间(dayjs第三个参数为true),防止意外解析出错;第三,记得在项目中统一时间处理方式,避免到处都是零散的转换逻辑。
如果后端可能返回null或空字符串,这个方法也能安全处理,不会抛出异常。顺便吐槽一句,跟时间相关的坑真的太多了,多打几个日志总没错。