Skip to content

扩展自定义属性

FormCreate 提供了强大的扩展机制,允许开发者通过自定义属性实现复杂的业务逻辑和动态表单生成。本文将详细介绍如何定义和使用自定义属性,以及如何在实际业务场景中应用这些功能。

自定义属性的基本概念

通过自定义属性扩展,您可以为表单组件定义特定的行为或逻辑,例如动态数据加载、验证规则、或其他业务逻辑处理。自定义属性可以在表单生成规则中进行配置,并在组件的生命周期中触发相应的回调。

内置自定义属性

数据结构

ts
type Effect = {
    //自定义属性的名称
    name: string;
    //rule初始化
    init({value}, rule, fapi);
    //rule开始加载
    load({value}, rule, fapi);
    //rule初始化完
    created({value}, rule, fapi);
    //rule加载完成
    loaded({value}, rule, fapi);
    //属性值发生变化
    watch({value}, rule, fapi);
    //组件的值发生变化
    value({value}, rule, fapi);
    //control 生效
    control({value}, rule, fapi);
    //rule 移除
    deleted({value}, rule, fapi);
    //rule 生成
    mounted({value}, rule, fapi);
}

定义自定义属性扩展

要创建一个自定义属性扩展,您需要定义一个属性对象,并注册到 FormCreate 中。以下是一个完整的示例:

1. 定义自定义属性

js
const optionEffect = {
    //自定义属性的名称
    name: 'option',
    //rule开始加载
    load({value}, rule, fapi) {
        setTimeout(() => {
            rule.options.push(...[
                {label: value, value: value}, {label: value + value, value: value + value},
            ])
        }, 300)
    },
    //属性值发生变化
    watch({value}, rule, fapi) {
        setTimeout(() => {
            rule.options.push(...[
                {label: value, value: value}, {label: value + value, value: value + value},
            ])
        }, 300)
    },
}

2. 注册自定义属性 注册自定义属性扩展后,您可以在规则中使用它:

js
formCreate.register(optionEffect)

3. 在规则中使用自定义属性

在生成规则中,您可以通过 effect 属性来使用自定义属性:

js
const rule = {
    type: 'input',
    field: 'username',
    title: '用户名',
    effect: {
        option: 'someValue'  // 使用自定义属性
    }
}

或者使用简写方式:

js
const rule = {
    type: 'input',
    field: 'username',
    title: '用户名',
    $option: 'someValue'  // 使用自定义属性的简写形式
}

示例

加载选项数据

在组件初始化时动态添加选项数据,实现表单选项的异步加载和动态更新功能。

通过组件的值计算

通过自定义注册逻辑,根据组件的值动态修改组件后缀(suffix),实现表单组件显示内容的动态更新。

监听自定义属性变化

通过watch监听自定义属性变化,实时响应组件属性变化并动态更新其他属性(如prefix),实现表单组件之间的联动和动态交互效果。

通过自定义属性扩展,FormCreate 提供了灵活而强大的表单动态生成和控制能力。开发者可以根据具体的业务需求,定义各种自定义属性,实现复杂的表单逻辑、动态数据加载和联动效果。

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