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

element-ui form 组件源码分享

form 导航菜单源码简单分享,主要从以下几个方面:

1、form 组件页面结构。

2、form 组件属性。

3、form 组件方法。

4、form 组件事件。

5、form-item 组件属性。

6、form-item 组件 slot 挂载。

7、form-item 组件方法。

一、组件页面结构。

二、组件属性。

2.1 model 表单数据对象,类型 object,无默认值。

2.2 rules 表单验证规则,类型 object,无默认值。

2.3 inline 行内表单模式,类型 boolean,默认 false。

2.4 label-position 表单域标签的位置,如果值为 left 或者 right 时,则需要设置 label-width,类型 string,可选值 right/left/top,默认 right。

2.5 label-width 表单域标签的宽度,例如 '50px'。作为 Form 直接子元素的 form-item 会继承该值。支持 auto。类型 string,无默认值。

2.6 label-suffix 表单域标签的后缀,类型 string,无默认值。

2.7 hide-required-asterisk 是否隐藏必填字段的标签旁边的红色星号,类型 boolean,默认 false。

2.8 show-message 是否显示校验错误信息,类型 boolean,默认 true。

2.9 inline-message 是否以行内形成展示校验信息,类型 boolean,默认 false。

2.10 status-icon 是否在输入框中显示校验结果反馈图标,类型 boolean,默认 false。

2.11 validate-on-rule-change 是否在 rules 属性改变后立即触发一次校验,类型 boolean,默认 true。

2.12 size 用于控制该表单内组件的尺寸,类型 string,可选值 medium/small/mini,无默认值。

2.13 disabled 是否禁用该表单内的所有组件。若设置为 true,则表单内组件上的 disabled 属性不再生效,类型 boolean,默认 false。

三、组件方法。

3.1 validate 对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。若不传入回调函数,则会返回一个 promise,参数 Function(callback:Function(boolean,object))。

validate(callback) {// 检查是否设置了 model,没有设置则报错并终止验证if (!this.model) {console.warn('[Element Warn][Form]model is required for validate to work!');return;}let promise;// 如果没有传入 callback,但支持 Promise,则创建一个 Promise 实例if (typeof callback !== 'function' && window.Promise) {promise = new window.Promise((resolve, reject) => {// 将 callback 替换为 Promise 的 resolve / rejectcallback = function(valid, invalidFields) {valid ? resolve(valid) : reject(invalidFields);};});}let valid = true; // 假设表单一开始是有效的let count = 0; // 验证完成的字段计数器// 如果没有任何需要验证的字段(fields 为空),并且提供了 callback,则直接调用 callback(true)if (this.fields.length === 0 && callback) {callback(true);}let invalidFields = {}; // 存储验证失败的字段及其错误信息// 遍历所有字段进行验证this.fields.forEach((field) => {field.validate('', (message, fieldObj) => {if (message) {valid = false; // 只要有一个字段出错,整个表单就无效}// 合并当前字段的错误信息到 invalidFields 中invalidFields = objectAssign({}, invalidFields, fieldObj);// 当所有字段都验证完成后,调用最终的回调函数if (typeof callback === 'function' &&++count === this.fields.length) {callback(valid, invalidFields);}});});// 如果创建了 promise,则返回它,以便外部使用 .then()/.catch()if (promise) {return promise;}}

3.2 validateField 对部分表单字段进行校验的方法,参数 Function(props:array|string,callback:Function(errorMessage:string))。

3.3 resetFields 对整个表单进行重置,将所有字段值重置为初始化值并移除校验结果。

resetField() {// 清除当前表单项的验证状态和错误提示信息this.validateState = ''; // 验证状态:如 success / error / validating 等this.validateMessage = ''; // 错误提示信息// 获取整个表单的数据模型(model)和当前字段的路径(prop)let model = this.form.model; // 表单数据对象(即传入的 model)let value = this.fieldValue; // 当前字段的当前值let path = this.prop; // 字段路径,例如 'user.name' 或 'age'// 如果字段路径中包含冒号(:),替换为点(.)if (path.indexOf(':') !== -1) {path = path.replace(/:/, '.');}// 使用工具函数 getPropByPath 解析路径,获取该字段在 model 中的引用// 返回一个对象 { o: parentObject, k: key },表示字段的实际存储位置let prop = getPropByPath(model, path, true);// 禁用验证this.validateDisabled = true;// 根据字段类型(数组 or 非数组)重置值为初始值(initialValue)if (Array.isArray(value)) {// 如果是数组,则复制一份 initialValue 数组赋值回去prop.o[prop.k] = [].concat(this.initialValue);} else {// 否则直接赋值 initialValueprop.o[prop.k] = this.initialValue;}// 在下一次 DOM 更新后重新启用验证this.$nextTick(() => {this.validateDisabled = false;});// 广播事件给子组件通知它们也需要重置内部状态this.broadcast('ElTimeSelect', 'fieldReset', this.initialValue);},

3.4 clearValidate 移除表单项的校验结果。传入待移除的表单项的 prop 属性或者 prop 组成的数组,如不传入则移除整个表单的校验结果。参数 Function(props:array|string)。

四、组件事件。

4.1 validate 任一表单项被校验后触发,回调参数 被校验的表单项 prop 值,校验是否通过,错误消息(如果存在)。

注意:validate 是一个方式,官方文档存在错误。源码当中并没有暴露 validate 这样一个事件。

五、form-item 组件属性。

5.1 prop 表单域 model 字段,在使用 validate、resetFields 方法的情况下,该属性是必填的。类型 string,可选值 传入 For么 组件的 model 中的字段,无默认值。

5.2 label 标签文本,类型 string,无默认值。

5.3 label-width 表单域标签的宽度,例如 '50px'。支持 auto,类型 string,无默认值。

5.4 required 是否必填,如果不设置,则会根据校验规则自动生成。类型 boolean,默认 false。

5.5 rules 表单验证规则,类型 object,无默认值。

5.6 error 表单域验证错误信息,设置该值会使表单验证状态变为 error,并显示该错误信息。类型 string,无默认值。

5.7 show-message 是否显示校验错误信息,类型 boolean,默认 true。

5.8 inline-message 以行内形式展示校验信息,类型 boolean,默认 false。

5.9 size 用于控制该表单域下组件的尺寸,类型 string,可选值 medium/small/mini,无默认值。

六、form-item 组件 slot 挂载。

6.1 -- Form item 的内容。

6.2 label 标签文本内容。

6.3 error 自定义表单校验信息的显示方式,参数为 { error }。

七、form-item 组件方法。

7.1 resetField 对该标点项进行重置,将其值重置为初始值并移除校验结果。

7.2 clearValidate 移除该表单项的校验结果。

相关文章:

  • GoogLeNet详解
  • 常用 svg ICON
  • 详细聊聊 Synchronized,以及锁的升级过程
  • Cursor+AI辅助编程-优先完成需求工程结构化拆解
  • 1分区 1-113 多线不起总线启
  • Optimum详解
  • LeetCode 216.组合总和 III:回溯算法实现与剪枝优化
  • 日拱一卒 | RNA-seq数据质控(1)
  • 400种行业劳动合同模板
  • 从零到精通:GoFrame ORM 使用指南 - 特性、实践与经验分享
  • vfrom表单设计器使用事件机制控制字段显示隐藏
  • SpringAI实现AI应用-自定义顾问(Advisor)
  • Kubernetes HPA 深度解析:生产环境自动扩缩容实战指南
  • 计算机网络笔记(十六)——3.3使用广播信道的数据链路层
  • 高效文件夹迁移工具,轻松实现批量文件管理
  • PVP鼠标推荐(deepseek)
  • 谷歌 Gemma 大模型安装步骤
  • Salesforce认证体系大升级!7月21日正式上线新平台
  • 第37次CCF--机器人饲养
  • C31-形参与实参的区别
  • 时隔14个月北京怀柔区重启供地,北京建工以3.59亿元摘得
  • 中方是否认同俄方关于新纳粹主义观点?外交部:联大曾多次通过相关决议
  • 远离军事前线的另一面暗斗:除了“断水”,印度还试图牵制对巴国际援助
  • 上海杨浦:优秀“博主”购房最高可获200万补贴
  • 上海:企业招用高校毕业生可享受1500元/人一次性扩岗补助
  • 加力、攻坚、借力、问效,上海为优化营商环境推出增量举措