Skip to content

表单的参数

在使用 FormCreate 时,您可以通过各种 props 来定制表单的行为和外观。这些参数允许您控制表单的生成规则、配置选项、双向数据绑定等,为复杂的表单场景提供了强大的支持。

Props 参数说明表

以下是常用的 props 参数及其详细说明:

属性名类型默认值作用说明注意事项
ruleArray<Rule>[]表单生成规则,定义字段类型、名称、验证规则等。需遵循 表单生成规则 格式,支持动态更新。
optionObject{}表单全局配置(如提交事件、布局方式等)。详见 全局配置选项
modelValue(v-model)Object-通过 v-model 双向绑定表单数据,实时同步值。需配合 v-model 使用,如 v-model="formData"
api(v-model:api)Api-通过 v-model:api 获取表单实例(fApi),调用表单操作方法。需在模板中显式绑定,如 v-model:api="formApi"
localestring | Object-配置多语言,支持语言代码(如 "zh-CN")或自定义语言包。若为对象,需包含完整的翻译键值对;全局配置优先级更高。
namestring-表单唯一名称,用于通过 formCreate.getApi(name) 获取实例。同一页面内名称需唯一,避免冲突。
indexstring | number-表单唯一标识,变化时自动清空表单数据。适用于动态表单重置场景(如切换编辑项)。
disabledbooleanfalse全局禁用表单,所有字段不可编辑。优先级高于字段级 disabled 配置。
subFormbooleantrue标记是否为子表单,控制是否与父表单同步验证/提交。嵌套表单时需显式设置为 true
extendOptionbooleantrue子表单是否继承父表单的全局配置(如 submitBtnvalidateOnSubmit)。若需独立配置子表单,可设置为 false
driverstring | object-自定义表单渲染逻辑,覆盖默认行为(如指定第三方渲染器)。需实现约定的渲染接口,通常用于复杂定制场景。
inForbooleanfalse标记表单是否在 v-for 循环中渲染,确保唯一性。动态生成表单时必须设置为 true,避免状态混乱。

示例

通过规则渲染表单

通过 rule 参数可以定义表单的渲染规则

vue
<template>
    <form-create :rule="rule"/>
</template>
<script setup>
    import {ref} from 'vue';
    //表单规则
    const rule = ref([
        {
            type: 'input',
            field: 'goods_name',
            title: '商品名称',
            value: 'form-create'
        },
        {
            type: 'checkbox',
            field: 'label',
            title: '标签',
            value: [0, 1, 2, 3],
            options: [
                {label: '好用', value: 0},
                {label: '快速', value: 1},
                {label: '高效', value: 2},
                {label: '全能', value: 3},
            ]
        },
        {
            type: 'el-button',
            title: '自定义按钮',
            native: false,
            on: {
                click() {
                    alert('点击了按钮')
                }
            },
            children: ['按钮']
        },
    ]);
</script>

配置表单参数

通过 option 参数可配置表单整体行为

vue
<template>
    <form-create :rule="rule" :option="options"/>
</template>
<script setup>
    import {ref} from 'vue';
    const rule = ref([
        {
            type: 'input',
            field: 'goods_name',
            title: '商品名称',
            value: 'form-create'
        },
        {
            type: 'checkbox',
            field: 'label',
            title: '标签',
            value: [0, 1, 2, 3],
            options: [
                {label: '好用', value: 0},
                {label: '快速', value: 1},
                {label: '高效', value: 2},
                {label: '全能', value: 3},
            ]
        },
        {
            type: 'el-button',
            title: '自定义按钮',
            native: false,
            on: {
                click() {
                    alert('点击了按钮')
                }
            },
            children: ['按钮']
        },
    ]);
    //表单配置
    const options = ref({
        onSubmit: (formData) => {
            alert(JSON.stringify(formData))
        },
        form: {
            labelPosition: 'top'
        },
        resetBtn: true
    });
</script>

获取表单 API

使用 v-model:api 获取表单操作对象 api

vue
<template>
    <form-create :rule="rule" v-model:api="api" :option="options"/>
</template>
<script setup>
    import {ref, onMounted} from 'vue';
    const api = ref(null);
    const rule = ref([
        {
            type: 'input',
            field: 'goods_name',
            title: '商品名称',
            value: 'form-create'
        },
        {
            type: 'checkbox',
            field: 'label',
            title: '标签',
            value: [0, 1, 2, 3],
            options: [
                {label: '好用', value: 0},
                {label: '快速', value: 1},
                {label: '高效', value: 2},
                {label: '全能', value: 3},
            ]
        },
        {
            type: 'el-button',
            title: '自定义按钮',
            native: false,
            on: {
                click() {
                    alert('点击了按钮')
                }
            },
            children: ['按钮']
        },
    ]);
    const options = ref({
        onSubmit: (formData) => {
            alert(JSON.stringify(formData))
        },
        resetBtn: true
    });
    onMounted(() => {
        api.value.setValue({
            goods_name: 'goods_name',
        })
    });
</script>

通过name获取表单API

使用 name 值获取表单操作对象 api

vue
<template>
    <form-create name="demo"/>
</template>
<script setup>
    import {onMounted} from 'vue';
    onMounted(() => {
        const api = formCreate.getApi('demo');
    })
</script>

禁用表单

通过 disabled 定义表单整体禁用状态

vue
<template>
    <div>
        <form-create :disabled="disabled" :rule="rule" v-model:api="fApi" :option="options"/>
        <el-button @click="disabled = !disabled">禁用</el-button>
    </div>
</template>
<script setup>
    import {ref} from 'vue';
    const fApi = ref(null);
    const disabled = ref(false);
    const rule = ref([
        {
            type: 'input',
            field: 'goods_name',
            title: '商品名称',
            value: 'form-create'
        },
        {
            type: 'checkbox',
            field: 'label',
            title: '标签',
            value: [0, 1, 2, 3],
            options: [
                {label: '好用', value: 0},
                {label: '快速', value: 1},
                {label: '高效', value: 2},
                {label: '全能', value: 3},
            ]
        },
        {
            type: 'el-button',
            title: '自定义按钮',
            native: false,
            on: {
                click() {
                    alert('点击了按钮')
                }
            },
            children: ['按钮']
        },
    ]);
    const options = ref({
        onSubmit: (formData) => {
            alert(JSON.stringify(formData))
        },
        resetBtn: true
    });
</script>

FormCreate 是一个开源项目,基于 MIT 许可证发布,欢迎个人和企业用户免费使用