Skip to content

API 概览

FormCreate 提供了丰富的 API 接口,允许开发者在表单的各个阶段进行全面控制,包括表单的生成、动态更新、验证和数据处理等功能。这些 API 可以帮助您轻松实现各种复杂的表单需求。

获取API

FormCreate 提供了多种方式获取 api 对象,以便开发者可以在不同的场景中操作和管理表单。

全局方法

通过 create 方法可以直接生成表单并获取 api 对象。这种方法适用于在非组件的场景中使用,如在单独的脚本文件中生成表单。

js
const api = formCreate.create(rules)

组件模式

Vue 组件中,通过 v-model:api 绑定 api 对象,以便在组件内部操作表单。

vue
<form-create name="form" :rule="rules" v-model:api="api"></form-create>

示例: 在 Vue 组件中使用 api 进行表单的动态操作:

vue
<template>
 <form-create name="form" :rule="rules" v-model:api="api"></form-create>
</template>


<script setup>
const rules = ref([
 { type: 'input', field: 'username', title: '用户名', props: { placeholder: '请输入用户名' } },
 { type: 'input', field: 'email', title: '邮箱', props: { placeholder: '请输入邮箱' } },
 { type: 'input', field: 'password', title: '密码', props: { type: 'password', placeholder: '请输入密码' } },
]);
const api = ref(null);
onMounted(() => {
 // 使用 api 进行操作
 api.value.setValue('username', 'example_user');
});
</script>

此外,您还可以使用 getApi 方法在任何位置获取 api 对象,例如在其他组件中:

js
const api = formCreate.getApi('form')

事件注入

在表单事件的处理函数中,api 对象可以通过事件参数自动注入。这种方式特别适用于处理与表单交互相关的事件。

ts
type InjectArg = {
 api: API,// 表单 API 对象
 rule: Rule[],// 表单生成规则
 self: Rule,// 当前组件生成规则
 option: Object,// 表单全局配置
 inject: Any,// 自定义注入的参数
 args: any[],// 原始回调参数
}

示例: 在表单组件的 blur 事件中获取 api 对象并进行操作:

js
const rule = {
 type: 'input',
 field: 'inputField',
 title: '输入框',
 inject: true,
 on: {
 blur(inject) {
 console.log(inject.api); // 获取 API 对象
 inject.api.setValue('inputField', 'blurred');
 }
 }
}

自定义组件注入

FormCreate 在生成自定义组件时,会自动向组件注入一些有用的参数。通过 props.formCreateInject 可以获取。

  • formCreateInject 对象包含以下属性:
    • formCreateInject.api 表单 API 对象,用于操作表单。
    • formCreateInject.options 表单组件的全局配置。
    • formCreateInject.rule 生成规则对象,定义了组件的所有配置。
    • formCreateInject.field 字段名称,与表单数据绑定。

示例: 在自定义组件中使用 formCreateInject 对象进行操作:

js
const customComponent = defineComponent({
 name: 'custom-component',
 props: {
 formCreateInject: Object, // 自动注入的表单参数
 },
 mounted() {
 console.log(this.formCreateInject.api); // 在组件内部访问 API
 }
});

注意

父表单与子表单、子表单之间相互独立,操作时需要调用各自表单对应的 API。通过 getSubForm 方法可获取指定子表单的操作接口。

API 功能说明

Api 属性

属性名类型说明
config Options表单的全局配置对象
index number|undefined当前表单在子表单中的索引
siblings Api[]|undefined同级表单的API数组
rule Rule[]当前表单的生成规则列表
form Object当前表单的数据对象
parentApi|undefined父级表单的Api对象
topApi|undefined最顶层表单的Api对象
children Api[]子表单的Api对象数组

Api 方法

按钮控制方法

方法名参数返回值说明
btn.loading loading: booleanvoid设置提交按钮加载状态
btn.disabled disabled: booleanvoid设置提交按钮禁用状态
btn.show show: booleanvoid设置提交按钮显示状态
resetBtn.loading loading: booleanvoid设置重置按钮加载状态
resetBtn.disabled disabled: booleanvoid设置重置按钮禁用状态
resetBtn.show show: booleanvoid设置重置按钮显示状态
submitBtnProps props: ButtonPropsvoid更新提交按钮配置
resetBtnProps props: ButtonPropsvoid更新重置按钮配置

元素操作方法

方法名参数返回值说明
el id: stringany获取指定组件的DOM元素或Vue实例
formEl -ComponentInternalInstance|undefined获取整个表单的Vue组件实例
wrapEl id: stringComponentInternalInstance|undefined获取指定表单项的Vue组件实例
scrollTo id: string, arg?: boolean|ScrollIntoViewOptionsvoid将指定表单项滚动至可视区域(行为同 DOM scrollIntoView 的配置)
focus id: stringvoid使指定表单项获得焦点

数据操作方法

方法名参数返回值说明
formData -Object获取当前表单数据对象
formData field: string[]Object获取特定字段的数据
getValue field: stringany获取指定字段的值
coverValue formData: Objectvoid用新数据覆盖表单当前值
setValue formData: Objectvoid设置整个表单的值
setValue field: string, value: anyvoid设置特定字段的值

表单结构操作方法

方法名参数返回值说明
removeField field: stringRule根据字段名删除组件
removeRule rule: RuleRule根据规则删除组件
fields -string[]获取所有字段名称
append rule: Rulevoid追加新组件
append rule: Rule, field: stringvoid在指定字段后追加组件
append rule: Rule, field: string, child: booleanvoid在指定字段后追加子组件
prepend rule: Rulevoid在开头插入新组件
prepend rule: Rule, field: stringvoid在指定字段前插入组件
prepend rule: Rule, field: string, child: booleanvoid在指定字段前插入子组件

显示控制方法

方法名参数返回值说明
hidden hidden: Booleanvoid隐藏/显示表单组件(无DOM)
hidden hidden: Boolean, field: string|Array<string>void隐藏/显示指定组件
display hidden: Booleanvoid控制组件显示与否(有DOM)
display hidden: Boolean, field: string|Array<string>void控制指定组件显示
hiddenStatus field: StringBoolean获取组件隐藏状态
displayStatus field: StringBoolean获取组件显示状态
disabled disabled: Booleanvoid禁用/启用表单组件
disabled disabled: Boolean, field: string|Array<string>void禁用/启用指定组件

规则操作方法

方法名参数返回值说明
model -{ [field: string]: Rule }获取表单组件生成规则
component -{ [name: string]: Rule }获取所有定义name属性的组件规则
reload rules: Rule[]void重新加载表单规则
updateOptions options: Optionsvoid更新表单全局配置
updateRule field: string, rule: Rulevoid更新指定字段规则
updateRule rules: { [field: string]: Rule }void批量更新字段规则
mergeRule field: string, rule: Rulevoid合并指定字段规则
mergeRules rules: { [field: string]: Rule }void批量合并字段规则
getRule id: stringRule获取指定字段规则
getRule id: string, origin: trueRule获取原始规则
getRule id: string, origin: falseRule获取处理后的规则
findTypetype: stringRule通过组件类型获取规则
findTypestype: stringRule[]通过组件类型获取多个规则
getCurrentFormRule-Rule获取当前子表单规则
getRenderRule id: stringRule获取组件最终渲染规则
getRefRule id: stringRule|Rule[]通过name属性获取规则
getParentRule id: string|RuleRule|undefined获取父级规则

验证相关方法

方法名参数返回值说明
updateValidate id: string, validate: Object[], merge?: BooleanPromise<any>更新组件验证规则
updateValidates validates: { [id: string]: Object[] }, merge?: BooleanPromise<any>批量更新验证规则
refreshValidate -void刷新表单验证状态
clearValidateState fields?: string|string[], clearSub?: Booleanvoid清理验证状态
clearSubValidateState fields?: string|string[]void清理子表单验证状态
validate callback?: (state: any) => voidPromise<any>验证整个表单
validateField field: string, callback?: (state: any) => voidPromise<any>验证指定字段
validateFields fields: string|string[], callback?: (state: any) => voidPromise<any>批量验证指定字段

组件操作方法

方法名参数返回值说明
method id: string, name: string(...args: any[]) => any获取组件方法
exec id: string, name: string, ...args: any[]any执行组件方法
trigger id: string, event: string, ...args: any[]void触发组件事件

表单操作方法

方法名参数返回值说明
onSubmit fn: (formData: Object, api: Api) => voidvoid监听表单提交事件
submit success?: (formData: Object, api: Api) => void, fail?: (api: Api) => voidPromise<any>手动提交表单
sync field: string|string[]void同步指定字段
sync rule: Rule|Rule[]void同步指定规则
refresh -void重新渲染整个表单
refreshOptions -void刷新表单选项
hideForm hide?: Booleanvoid隐藏整个表单
changeStatus -Boolean获取表单修改状态
clearChangeStatus -void重置表单修改状态
toJson space?: string|numberstring获取表单JSON规则
closeModal id: stringvoid关闭frame组件弹出框
resetFields -void重置整个表单
resetFields field: string|string[]void重置指定字段
getSubFormfield: stringApi|Api[]获取子表单Api对象

异步操作方法

方法名参数返回值说明
nextTick fn: (api: Api) => voidvoid表单渲染后执行回调
nextRefresh fn: Functionvoid回调后重新渲染表单
deferSyncValuefn: Function, autoSync?: booleanvoid回调后同步表单数据

数据管理方法

方法名参数返回值说明
fetch opt: FetchOptionPromise<any>发送远程请求
setData id: string, value?: anyvoid设置外部数据
getData id: string, defaultValue?: anyany获取外部数据
watchDatafn: (get: (id: string, defaultValue?: any) => any, change: boolean) => void() => Function监听数据变化
refreshData id: stringvoid刷新外部数据相关组件

事件管理方法

方法名参数返回值说明
bus.$emit event: string, ...args: any[]void手动触发事件
bus.$on event: string|string[], callback: Functionvoid监听事件
bus.$once event: string|string[], callback: Functionvoid监听一次性事件
bus.$off event: string|string[], callback: Functionvoid取消事件监听
emitevent: string, ...args: any[]void触发表单自定义事件
onevent: string|string[], callback: Functionthis监听表单自定义事件
onceevent: string|string[], callback: Functionthis监听一次性表单事件
offevent?: string|string[], callback?: Functionthis取消表单事件监听

自定义属性方法

方法名参数返回值说明
setEffect id: string, attr: string, value: anyvoid设置自定义属性
clearEffectDataid: string, attr?: stringvoid清理自定义属性数据
数据结构

以下是 Api 的完整数据结构及其可用方法的简明解释:

ts
interface Api {
 // 表单的全局配置对象,包含了所有表单的配置信息
 readonly config: Options;
 readonly options: Options;
 // 获取当前表单在子表单(group)中的索引(如果表单是嵌套的子表单)
 readonly index: number|undefined;
 // 获取当前表单所在的子表单(group)中所有表单的API(如果表单是嵌套的子表单)
 readonly siblings: Api[]|undefined;
 // 当前表单的生成规则列表,定义了表单的结构和组件
 readonly rule: Rule[];
 // 当前表单的数据对象,其中包含了所有字段的值
 readonly form: Object;
 // 父级表单的 Api 对象(如果表单是嵌套的子表单)
 readonly parent: Api | undefined;
 // 最顶层表单的 Api 对象(适用于嵌套表单的场景)
 readonly top: Api | undefined;
 // 子表单的 Api 对象数组,允许对嵌套的子表单进行操作
 readonly children: Api[];
 // 提交按钮的控制接口,允许动态设置提交按钮的状态
 btn: {
 // 设置提交按钮的加载状态,如加载中状态
 loading(loading: boolean): void;
 // 设置提交按钮的禁用状态
 disabled(disabled: boolean): void;
 // 设置提交按钮的显示状态,控制按钮是否可见
 show(show: boolean): void;
 }
 // 重置按钮的控制接口,允许动态设置重置按钮的状态
 resetBtn: {
 // 设置重置按钮的加载状态
 loading(loading: boolean): void;
 // 设置重置按钮的禁用状态
 disabled(disabled: boolean): void;
 // 设置重置按钮的显示状态
 show(show: boolean): void;
 }
 // 获取指定组件的 DOM 元素或 Vue 实例
 el(id: string): any;
 // 获取整个表单的 Vue 组件实例,便于直接操作组件的内部方法或属性
 formEl(): undefined | ComponentInternalInstance;
 // 获取指定表单项的 Vue 组件实例,用于对具体表单项的操作
 wrapEl(id: string): undefined | ComponentInternalInstance;
 // 将指定表单项滚动到可视区域;arg 为 true/false 或 ScrollIntoViewOptions,语义与 scrollIntoView 一致
 scrollTo(id: string, arg?: boolean | ScrollIntoViewOptions): void;
 // 聚焦指定表单项
 focus(id: string): void;
 // 更新表单提交按钮的配置,如文本、样式等
 submitBtnProps(props: ButtonProps): void;
 // 更新表单重置按钮的配置
 resetBtnProps(props: ButtonProps): void;
 // 获取当前表单的数据对象,返回所有字段的值
 formData(): Object;
 // 获取特定字段的数据,返回指定字段的值
 formData(field: string[]): Object;
 // 获取指定字段的值
 getValue(field: string): any;
 // 用新的数据覆盖表单的当前值
 coverValue(formData: Object): void;
 // 设置表单的值,可以为整个表单设置,也可以为特定字段设置
 setValue(formData: Object): void;
 setValue(field: string, value: any): void;
 // 根据字段名删除对应的组件
 removeField(field: string): Rule;
 // 根据组件生成规则删除对应的组件
 removeRule(rule: Rule): Rule;
 // 获取表单中所有字段的名称
 fields(): string[];
 // 在指定字段后追加新的组件
 append(rule: Rule): void;
 append(rule: Rule, field: string): void;
 append(rule: Rule, field: string, child: boolean): void;
 // 在指定字段前插入新的组件
 prepend(rule: Rule): void;
 prepend(rule: Rule, field: string): void;
 prepend(rule: Rule, field: string, child: boolean): void;
 // 隐藏或显示表单的指定组件(无 DOM 节点)
 hidden(hidden: Boolean): void;
 hidden(hidden: Boolean, field: string | Array<string>): void;
 // 控制表单组件的显示与否(有 DOM 节点)
 display(hidden: Boolean): void;
 display(hidden: Boolean, field: string | Array<string>): void;
 // 获取组件的隐藏状态,返回布尔值
 hiddenStatus(field: String): Boolean;
 // 获取组件的显示状态,返回布尔值
 displayStatus(field: String): Boolean;
 // 禁用或启用表单的指定组件
 disabled(disabled: Boolean): void;
 disabled(disabled: Boolean, field: string | Array<string>): void;
 // 获取所有表单组件的生成规则,返回一个对象,键为字段名,值为规则对象
 model(): { [field: string]: Rule };
 // 获取所有定义了 `name` 属性的组件规则,返回一个对象,键为组件名,值为规则对象
 component(): { [name: string]: Rule };
 // 重新加载表单,使用新的规则列表替换当前表单的规则
 reload(rules: Rule[]): void;
 // 更新表单的全局配置
 updateOptions(options: Options): void;
 // 监听表单提交事件,当表单被提交时执行回调
 onSubmit(fn: (formData: Object, api: Api) => void): void;
 // 手动提交表单,触发提交流程并执行成功或失败的回调
 submit(success?: (formData: Object, api: Api) => void, fail?: (api: Api) => void): Promise<any>;
 // 同步指定字段或规则,确保表单的状态与最新数据同步
 sync(field: string | string[]): void;
 sync(rule: Rule | Rule[]): void;
 // 重新渲染整个表单,适用于更新表单布局或内容
 refresh(): void;
 refreshOptions(): void;
 // 隐藏整个表单,通常用于表单不需要展示的场景
 hideForm(hide?: Boolean): void;
 // 获取表单的修改状态,返回布尔值
 changeStatus(): Boolean;
 // 重置表单的修改状态
 clearChangeStatus(): void;
 // 设置自定义属性,用于扩展表单功能
 setEffect(id: string, attr: string, value: any): void;
 // 清理自定义属性的数据
 clearEffectData(id: string, attr?: string): void;
 // 更新指定字段的表单生成规则
 updateRule(field: string, rule: Rule): void;
 updateRule(rules: { [field: string]: Rule }): void;
 // 合并指定字段的表单生成规则
 mergeRule(field: string, rule: Rule): void;
 mergeRules(rules: { [field: string]: Rule }): void;
 // 获取指定字段的生成规则
 getRule(id: string): Rule;
 getRule(id: string, origin: true): Rule;
 getRule(id: string, origin: false): Rule;
 //通过组件类型获取生成规则
 findType(type: string): Rule;
 findTypes(type: string): Array<Rule>;
 //如果当前表单是子表单, 可以通过这个方法获取子表单组件的规则
 getCurrentFormRule(): Rule;
 // 获取组件最终渲染的规则,包含动态变化后的内容
 getRenderRule(id: string): Rule;
 // 通过 `name` 属性获取组件规则,支持单个或多个组件
 getRefRule(id: string): Rule | Rule[];
 // 通过 `name`,`field`或者规则获取父级规则
 getParentRule(id: string | Rule): undefined | Rule;
 // 更新组件的验证规则,支持合并或替换
 updateValidate(id: string, validate: Object[], merge?: Boolean): Promise<any>;
 updateValidates(validates: { [id: string]: Object[] }, merge?: Boolean): Promise<any>;
 // 刷新表单的验证状态,重新触发验证逻辑
 refreshValidate(): void;
 // 清理指定字段或整个表单的验证状态
 clearValidateState(fields?: string | string[], clearSub?: Boolean): void;
 // 清理指定字段子表单的表单的验证状态
 clearSubValidateState(fields?: string | string[]): void;
 // 验证表单,返回验证结果的 Promise
 validate(callback?: (state: any) => void): Promise<any>;
 // 验证指定字段,返回验证结果的 Promise
 validateField(field: string, callback?: (state: any) => void): Promise<any>;
 // 批量验证多个字段,返回验证结果的 Promise
 validateFields(fields: string | string[], callback?: (state: any) => void): Promise<any>;
 // 获取指定组件的方法,用于调用组件的自定义方法
 method(id: string, name: string): (...args: any[]) => any;
 // 手动执行指定组件的方法
 exec(id: string, name: string, ...args: any[]): any;
 // 手动触发组件的事件,适用于模拟用户操作或触发自定义逻辑
 trigger(id: string, event: string, ...args: any[]): void;
 // 获取表单的 JSON 生成规则,用于导出或保存表单结构
 toJson(space?: string | number): string;
 // 关闭指定 frame 组件的弹出框
 closeModal(id: string): void;
 // 重置表单,将所有字段的值重置为初始状态
 resetFields(): void;
 resetFields(field: string | string[]): void;
 // 获取指定字段的子表单 Api 对象,支持嵌套表单的操作
 getSubForm(field: string): Api | Api[];
 // 在表单渲染后执行回调,确保所有组件都已加载完毕
 nextTick(fn: (api: Api) => void): void;
 // 在执行回调后重新渲染表单,适用于动态更新后的表单刷新
 nextRefresh(fn: Function): void;
 // 在执行回调后同步表单数据,确保数据与 UI 同步
 deferSyncValue(fn: Function, autoSync?: boolean): void;
 // 发送远程请求,支持自定义的请求逻辑和处理方式
 fetch(opt: FetchOption): Promise<any>;
 // 设置外部数据,支持在表单中使用外部数据源
 setData(id: string, value?: any): void;
 // 获取外部数据,返回之前设置的数据对象
 getData(id: string, defaultValue?: any): any;
 // 在回调中通过get方法读取外部数据,获取对数据的变化监听,当数据变化后重新触发回调.返回解除监听函数
 watchData(fn: (get: (id: string, defaultValue?: any) => any, change: boolean) => void): () => Function;
 // 刷新与外部数据相关的组件,确保数据变更后 UI 同步更新
 refreshData(id: string): void;
 // 内置事件管理系统,支持手动触发和监听自定义事件
 bus: {
 $emit(event: string, ...args: any[]): void; // 手动触发事件
 $on(event: string | string[], callback: Function): void; // 监听事件
 $once(event: string | string[], callback: Function): void; // 监听一次性事件
 $off(event: string | string[], callback: Function): void; // 取消事件监听
 };
 // 手动触发表单的自定义事件
 emit(event: string, ...args: any[]): void;
 // 监听表单自定义事件
 on(event: string | string[], callback: Function): this;
 // 监听一次性表单自定义事件
 once(event: string | string[], callback: Function): this;
 // 取消表单自定义事件的监听
 off(event?: string | string[], callback?: Function): this;
}

API 的扩展

FormCreate 的 API 具有高度的扩展性,允许开发者创建自定义的操作和功能,以满足复杂的业务需求。

示例: 扩展 API 实现自定义操作

js
import formCreate from '@form-create/element-ui';


formCreate.extendApi((api) => {
 api.customMethod = function() {
 // 执行自定义操作
 console.log('这是一个自定义 API 方法');
 }
})

通过extendApi方法,可以添加新的方法或属性,使 api 更加适应特定的业务需求。这种方式非常适合在大型项目中进行 API 的个性化定制。

示例

禁用表单

vue
<template>
 <div>
 <form-create :v-model:api="api"/>
 <el-button @click="handle">禁用表单</el-button>
 </div>
</template>
<script setup>
 import {ref} from 'vue';
 const api = ref(null);
 function handle() {
 api.value.disabled(true);
 }
</script>

修改组件值

vue
<template>
 <div>
 <form-create :v-model:api="api"/>
 <el-button @click="handle">禁用表单</el-button>
 </div>
</template>
<script setup>
 import {ref} from 'vue';
 const api = ref(null);
 function handle() {
 api.value.setValue({
 field: 'value'
 });
 }
</script>

获取组件规则

vue
<template>
 <div>
 <form-create :v-model:api="api"/>
 <el-button @click="handle">获取规则</el-button>
 </div>
</template>
<script setup>
 import {ref} from 'vue';
 const api = ref(null);
 function handle() {
 const rule = api.value.getRule('field');
 api.value.getRule('name'); //通过 name 获取规则
 }
</script>

修改组件规则

vue
<template>
 <div>
 <form-create :v-model:api="api"/>
 <el-button @click="handle">修改规则</el-button>
 </div>
</template>
<script setup>
 import {ref} from 'vue';
 const api = ref(null);
 function handle() {
 api.value.getRule('field').prpos.disabled = true;
 }
</script>

表单验证

vue
<template>
 <div>
 <form-create :v-model:api="api"/>
 <el-button @click="handle">验证</el-button>
 </div>
</template>
<script setup>
 import {ref} from 'vue';
 const api = ref(null);
 function handle() {
 api.value.validate().then(()=>{
 //todo 验证通过
 });
 }
</script>

提交表单

vue
<template>
 <div>
 <form-create :v-model:api="api"/>
 <el-button @click="handle">提交</el-button>
 </div>
</template>
<script setup>
 import {ref} from 'vue';
 const api = ref(null);
 function handle() {
 api.value.submit();
 }
</script>

AltStyle によって変換されたページ (->オリジナル) /