当前位置: 首页 > article >正文

el-form+el-date-picker组合使用时候的回显问题

背景

我有弹窗创建任务时间的需求,同时也可以修改任务时间,所以复用了弹窗和表单,但在表单里使用日期时间组件的时候,发现了问题

问题描述:在表单中使用form的属性绑定日期时间选择器的v-model,会出现的两个问题如下

1. 修改时间的时候,回显会有问题

2. 表单的校验会用不了

   <el-form-item label="任务时间" prop="taskTime">
         <el-date-picker
            v-model="form.taskTime"
            placeholder="请选择时间范围"
            type="datetimerange"
            range-separator="~"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
            value-format="yyyy-MM-dd HH:mm:ss"
            width="400px"
          />
   </el-form-item>

解决方式如下:

vue组件部分

<el-form-item label="任务时间" prop="taskTime">
          <el-date-picker
            v-model="form.taskTime"
            :key="datePickerKey"
            placeholder="请选择时间范围"
            type="datetimerange"
            range-separator="~"
            @input="datetimeChange"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
            value-format="yyyy-MM-dd HH:mm:ss"
            width="400px"
          />
        </el-form-item>

js部分

data() {
     return {
        form: {
          taskTime: [null, null], // 确保初始化
        },
        datePickerKey: 0,
        rules: {
             taskTime: [
            { type: 'array', required: true, trigger: 'blur', message: '请选择任务时间' },
            {
              validator: (rule, value, callback) => {
                const val = this.form.taskTime;
                if (val && val.length === 2 && val[0] && val[1]) {
                  callback();
                } else {
                  callback(new Error('请选择任务时间'));
                }
              },
            },
        },
      };
    },
  watch: {
     visible(newV) {
        if(!newV) { // 关闭弹窗的时候清空表单校验
          this.$nextTick(() => {
            this.$refs.formRef.clearValidate();
          });
        }
      }
  },
methods: {

      /**
       * 开始日期-结束日期改变
       * **/
      datetimeChange(e) {
        if (e && e.length === 2) {
          this.$set(this.form, 'taskTime', e);
        } else {
          this.$set(this.form, 'taskTime', ['', '']);
        }
        this.$refs.formRef.clearValidate(['taskTime']);
        this.datePickerKey = (new Date()).getTime();
      },
}


http://www.kler.cn/a/466798.html

相关文章:

  • 【网络协议】开放式最短路径优先协议OSPF详解(一)
  • [论文笔记]Representation Learning with Contrastive Predictive Coding
  • 第0章 机器人及自动驾驶SLAM定位方法全解析及入门进阶学习建议
  • LLM大模型RAG内容安全合规检查
  • 周末总结(2024/01/04)
  • 我们公司只有3个人,一个前端,一个后端
  • 把vue项目或者vue组件发布成npm包或者打包成lib库文件本地使用
  • element-ui dialog 组件源码分享
  • K8S的伸缩应用程序-扩缩容,版本回滚
  • 使用 apply 方法将其他列的值传入 DataFrame 或 Series 的函数,来进行更灵活的计算或操作
  • Debian 系统中解决中文日志乱码问题
  • 【ShuQiHere】算法的开枝散叶:从机器学习到深度学习的模型总结
  • Qt 状态机使用说明
  • MT8788安卓核心板_MTK8788核心板参数_联发科模块定制开发
  • HTML——64. 数字输入框和活动条
  • 单片机通信
  • 交换机关于环路、接口绑定、链路聚合的相关知识
  • 游戏引擎学习第72天
  • [paddle] 非线性拟合问题的训练
  • React 性能优化
  • 数仓建模(二) 从关系型数据库到数据仓库的演变
  • 淘宝商品详情API返回值说明:Python爬虫代码示例
  • perf:对hutool的BeanUtil工具类做补充
  • 【51单片机零基础-chapter3:按键:独立按键|||附带常见C语句.逻辑运算符】
  • 中国科技产业化促进会深入深圳企业调研
  • gesp(C++一级)(17)洛谷:B4062:[GESP202412 一级] 温度转换