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

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 移除该表单项的校验结果。

http://www.xdnf.cn/news/4776.html

相关文章:

  • 2025.5.8总结(中期审视)
  • JAVA多线程进阶
  • 第五十四篇 AI与数据分析
  • 推测式思维树:让大模型快速完成复杂推理
  • 针对共享内存和上述windows消息机制 在C++ 和qt之间的案例 进行详细举例说明
  • Android7 Input(六)InputChannel
  • OpenHarmony平台驱动开发(九),MIPI DSI
  • Rust 开发环境搭建与插件
  • MySQL报错解决过程
  • 39、.NET GC是什么? 为什么需要GC?
  • # 如何使用OpenCV进行发票的透视变换和二值化处理
  • EasyRTC嵌入式音视频通话SDK驱动智能硬件音视频应用新发展
  • 集成变压器的网口的PCB设计
  • 【MySQL】存储引擎 - MEMORY详解
  • 【JS逆向基础】前端基础-HTML与CSS
  • 初学者的AI智能体课程:构建AI智能体的十堂课
  • SpringBoot 讯飞星火AI WebFlux流式接口返回 异步返回 对接AI大模型 人工智能接口返回
  • oracle 对一个字段的数据做排序 :值的依次排序为.“思考”->“asd”->“三点“
  • MySQL 8.0 OCP 英文题库解析(一)
  • Web开发-JavaEE应用SpringBoot栈ActuatorSwaggerHeapDump提取自动化
  • 【Bluedroid】 HID 设备应用注册与主机服务禁用流程源码解析
  • SpringBoot项目接入DeepSeek
  • 「Mac畅玩AIGC与多模态24」开发篇20 - 多语言输出工作流示例
  • 17.Java 注解与实例
  • C++回顾 Day4
  • 【Bootstrap V4系列】学习入门教程之 组件-轮播(Carousel)高级用法
  • 基于供热企业业务梳理的智能化赋能方案
  • 易境通散货拼柜系统:如何让拼箱货代协作效率翻倍?
  • 编程日志4.28
  • python23-函数返回值和参数处理,变量作用域