You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Element UI el-date-picker设为datetime类型时触发elForm未定义报错

Element UI datetime类型日期选择器点击报错问题

问题详情

使用Element UI的el-date-picker组件时,type="date"可正常工作,但设置为type="datetime"时,点击组件会触发内部报错。

代码实现

脚本部分

import { cloneDeep } from 'lodash';

export default {
  name: 'actions',
  components: {},
  props: {
    data: {
      type: Object,
      default: () => ({}),
    },
  },
  data() {
    return {
      indentData: {
        reported_at: '',
      },
    };
  },
  computed: {
    validToPickerOptions() {
      const endOfDay = new Date(new Date().setHours(23, 59, 59, 999));
      return {
        disabledDate(time) {
          return (time >= endOfDay);
        },
      };
    },
  },
  methods: {
    reportMarkReported() {
      console.log('this.indentData', this.indentData);
      this.$emit('save-report-release', this.indentData);
    },
  },
  created() {
    this.indentData = cloneDeep(this.data);
  },
};

模板部分

<template>
  <div>
  <div class="action">
    <button @click="reportMarkReported">
      Submit
    </button>
  </div>
  <div>
    <el-date-picker
      v-model="indentData.reported_at"
      type="datetime"
      format="dd MMM 'yy hh:mm A"
      placeholder="Pick a Date"
      size="small"
    />
    </div>
  </div>
</template>

报错信息

vue.esm.js?b66f:1741 TypeError: Cannot use 'in' operator to search for 'elForm' in undefined
at resolveInject (vue.esm.js?efeb:4649:1)
at initInjections (vue.esm.js?efeb:4619:1)
at Vue._init (vue.esm.js?efeb:4710:1)
at new VueComponent (vue.esm.js?efeb:5836:1)
at createComponentInstanceForVnode (vue.esm.js?b66f:4310:1)
at init (vue.esm.js?b66f:4131:1)
at createComponent (vue.esm.js?b66f:5608:1)
at createElm (vue.esm.js?b66f:5555:1)
at createChildren (vue.esm.js?b66f:5682:1)
at createElm (vue.esm.js?b66f:5584:1)

vue.esm.js?b66f:591 [Vue warn]: Error in nextTick: "TypeError: Cannot read properties of undefined (reading '$el')"

TypeError: Cannot read properties of undefined (reading '$el')
at Vue.eval (element-ui.common.js?bc95:18396:1)
at Array.eval (vue.esm.js?b66f:1837:1)
at flushCallbacks (vue.esm.js?b66f:1758:1)

解决方案

1. 修复v-model初始值类型

datetime类型选择器要求绑定值为Date对象或符合格式的字符串,空字符串会导致组件内部解析异常,修改初始值:

data() {
  return {
    indentData: {
      reported_at: null, // 替换空字符串为null
    },
  };
},

同时在created钩子中,若this.data.reported_at为空,也要确保赋值为null而非空字符串。

2. 检查版本兼容性

该报错常出现在Element UI与Vue版本不匹配的场景,确保使用适配Vue 2.x的Element UI版本(推荐2.15.x系列)。

3. 确认组件注册正确

如果是按需引入Element UI,需在当前组件中正确注册DatePicker:

import { DatePicker } from 'element-ui';
export default {
  components: {
    ElDatePicker: DatePicker
  },
  // 其他代码
}

4. 验证格式字符串合法性

当前format属性使用MMM(英文月份缩写),若环境不支持该格式会引发异常,可临时改为MM(数字月份)测试是否为格式问题:

<el-date-picker
  v-model="indentData.reported_at"
  type="datetime"
  format="dd MM 'yy hh:mm A"
  placeholder="Pick a Date"
  size="small"
/>

内容的提问来源于stack exchange,提问作者devil-0-per

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:55:13