Skip to content

表单的事件

在使用 FormCreate 生成表单时,了解如何处理各种事件是构建动态表单的重要步骤。本节将详细介绍如何通过组件和 fApi 监听和处理表单事件,确保你能灵活控制表单的交互行为。

监听表单事件

FormCreate 提供了两种方式来监听表单事件:通过组件直接监听和通过 fApi 监听。

组件监听方式

你可以在模板中直接使用 v-on 或简写的 @ 语法来监听事件。

html
<form-create @change="onChange"></form-create>

fApi 监听方式

你也可以通过 fApi 对象来监听事件,这种方式更适合在逻辑层面集中管理事件处理。

js
fApi.on('change',this.onChange);

事件类型

事件名类型触发时机
change(field: string, value: any, rule: Rule, api: Api, setFlag: boolean) => void表单字段值变化时触发(用户输入或代码调用 api.setValue)。setFlag=true 表示由代码触发。
created(api: Api) => void表单实例创建完成,但未渲染 DOM。
mounted(api: Api) => void表单首次渲染完成(DOM 挂载后)。
reload(api: Api) => void调用 api.reload() 方法重载表单后。
beforeSubmit(api: Api) => void表单提交前置事件。
submit(formData: Object, api: Api) => void点击提交按钮或调用 api.submit()
remove-field(field: string, rule: Rule, api: Api) => void调用 api.removeField(field) 移除字段时。
remove-rule(rule: Rule, api: Api) => void调用 api.removeRule(rule) 移除规则时。
repeat-field(rule: Rule, api: Api) => void添加规则时检测到 field 重复。
emit-event(emitName: string, ...args: any[]) => void组件内触发 emit 事件(如自定义组件的 @change)。
control(rule: Rule, api: Api) => void规则中 control 属性控制的显示/隐藏状态变化时。

示例

提交表单事件

通过 submit 事件监听表单提交事件

vue
<template>
    <div>
        <form-create :rule="rule" @submit="handleSubmit"/>
    </div>
</template>
<script setup>
    import {ref} from 'vue';
    function handleSubmit(formData) {
        //todo 提交表单
    }
    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>

表单创建完成事件

通过 mounted 事件监听表单创建完成事件

vue
<template>
    <div>
        <form-create :rule="rule" @mounted="handleMounted"/>
    </div>
</template>
<script setup>
    import {ref} from 'vue';
    function handleMounted(api) {
        api.disabled(true, ['goods_name'])
    }
    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>

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