元数据

元数据meta定义了标准的 JSON Schema 结构和非标准的嵌套在 JSON Schema 中的ui属性,通过定义元数据meta并解析它来构建我们的表单。

一个最简单的 meta 结构如下:

meta = {
  type: "object", // 可有可无,默认会强制为 `object`
  properties: {},
};

v-formly-v3 中通过解析meta并实例化存储meta结构的类为context,即表单组件的上下文,其中存储着表单组件的诸如idvaluetype等等信息,以及组件的处理逻辑和校验等。这样,我们就可以认为 meta实例化后就是context。我们目前定义的的meta有以下几个,分别对应AJV 中的 JSON 基本数据类型open in new window

|-- base.meta.js <!-- 此类为基类,其他`meta`类都继承于它 -->
    |-- array.meta.js
    |-- boolean.meta.js
    |-- number.meta.js
    |-- object.meta.js
    |-- string.meta.js

提示

meta是 JSON 数据结构,meta是存储meta等数据结构的 js 类。

下面我们分别介绍meta中的标准 JSON Schema 和ui

JSON Schema

JSON Schema 有完整的文档说明open in new window,以下为 v-formly-v3 中使用的一些属性说明。

常规类

参数说明类型默认值
:type数据类型,支持 JavaScript 基础类型number,string,boolean,object,arrayobject
:enum枚举,静态数据源any[]-

数值类型

参数说明类型默认值
:minimum最小值number-
:exclusiveMinimum约束是否包括 minimumboolean-
:maximum最大值number-
:exclusiveMaximum约束是否包括 maximumboolean-
:multipleOf倍数number-

字符串类型

参数说明类型默认值
:maxLength定义字符串的最大长度number-
:minLength定义字符串的最小长度number-
:pattern验证输入字段正则表达式字符串string-

数组类型

参数说明类型默认值
:items数组元素类型描述,只支持数组对象,若需要基础类型数组可通过其他部件支持object-
:minItems约束数组最小的元素个数number-
:maxItems约束数组最大的元素个数number-
:uniqueItems约束数组每个元素都不相同(TODO)boolean-
:additionalItems数组额外元素的校验规则(TODO)object-

对象类型

参数说明类型默认值
:maxProperties最大属性个数,必须是非负整数number-
:minProperties最小属性个数,必须是非负整数number-
:required必需属性string[]-
:properties定义属性{ [key: string]: object }-

条件类(TODO: 未测试)

参数说明类型默认值
:if条件验证object-
:then条件验证object-
:else条件验证object-

逻辑类

参数说明类型默认值
:allOf不建议 使用,可用 required 替代any[]-
:anyOf不建议 使用,可用 requiredminProperties 替代any[]-
:oneOf不建议 使用,值必须是其中之一any[]-

格式与视觉类

参数说明类型默认值
:title属性描述string-
:description属性目的性解释string-
:default默认值any-
:readOnly是否只读状态,等同 disabledboolean-
:format数据格式,文档open in new windowstring-

非标准

参数说明类型默认值
:ui指定 UI 配置信息,优先级高于 v-formly-v3 组件 ui 属性值any-

UI

基础类

参数说明类型默认值
:visibleIf指定条件时才显示{ [key: string]: any[] | ((value: any, property: FormProperty) => boolean) }-

校验类

参数说明类型默认值
:errors自定义错误信息文本{ [ key: string ]: string | ((obj: object) => string) }-
:showRequired是否展示必填项标识 *boolean-
:validator自定义校验(value: any) => any[]-

数组类

参数说明类型默认值
:items指定子元素的 UIobject-
:addTitle指定添加按钮文本string添加
:addType指定添加按钮风格,等同按钮 typestringdashed
:removable指定是否显示移除按钮boolean-
:removeTitle指定移除按钮文本string移除

表单元素类

参数说明类型默认值
:type指定 inputtypestringtext
:placeholder文字框中显示提示信息string-
:autofocus加载时是否获得焦点boolean-

渲染类

参数说明类型默认值
:component指定采用什么组件渲染string-
:size元素组件大小default,large,small-
:grid响应式属性object-
:optional标签可选信息string-
:optionalHelp标签可选帮助string, any-

响应式属性

grid 属性等同完整的 Grid 栅格系统open in new window,透过 grid 可以决定表单如何渲染。

参数说明类型默认值
:gutter栅格间隔number-
:span每个表单元素栅格占位格数,为 0 时相当于 display: nonenumber-
:xs<768px 响应式栅格,可为栅格数或一个包含其他属性的对象number-
:sm≥768px 响应式栅格,可为栅格数或一个包含其他属性的对象number-
:md≥992px 响应式栅格,可为栅格数或一个包含其他属性的对象number-
:lg≥1200px 响应式栅格,可为栅格数或一个包含其他属性的对象number-
:xl≥1600px 响应式栅格,可为栅格数或一个包含其他属性的对象number-
:xxl保留字段,0.7.0 后支持number-

水平布局类 Schema

务必二者总和为 24

参数说明类型默认值
:spanLabellabel 所占栅格数number5
:spanControl表单控件所占栅格数number19
:offsetControlcontrol 栅格左侧的间隔格数,间隔内不可以有栅格number-

参考

实现了 delon form 中的大部分属性,未实现部分后面考虑是否需要添加进去。

@delon/form Schemaopen in new window