SuperAPI AI 工具集

syncfusion-angular-form-builder

前端与建站

查看项目

更新于 10-16 15:21

技能介绍

用途

本技能用于在用户需要创建、排查或扩展基于 Syncfusion Form Builder 的可编辑 Angular 表单时使用。Form Builder 是一款可视化设计器,会生成 schema 驱动的表单定义:用户可将字段拖拽到画布上,在属性面板中配置字段,预览结果,并导出 schema 供 Form Renderer 使用。

适用场景包括:

  • 创建 Angular 应用并安装 Syncfusion Form Builder 包;
  • 渲染包含工具箱、画布、属性面板、代码视图和预览的可视化表单设计器;
  • 通过 schema 属性加载初始表单;
  • 在 properties 中定义字段,在 layout 中排列字段,并设置表单级设置;
  • 配置 Form Builder 的导出、预览、持久化、RTL、模式、模板和工具箱项等属性;
  • 从 Basic、Advanced 和 Layout 工具箱分类中选择字段;
  • 自定义字段属性,添加或隐藏属性面板条目,并刷新设计器;
  • 定义自定义工具箱模板,并用 setFieldValue 同步模板值;
  • 处理字段 drag-start、drag-over、drop 和 property-changed 事件;
  • 查看、复制、导入或导出生成的 JSON schema;
  • 准备包含验证、条件、表达式、依赖下拉、动态范围、远程数据或 Data Grid 字段的 schema。

注意:本技能面向表单的设计与编辑。若主要任务是向终端用户渲染已完成的 schema、处理提交值或配置渲染器表单操作,应使用 Form Renderer 技能。

主要能力与文档导航

资料按以下参考文档组织:

  • getting-started.md:组件 API 与事件(所有 Form Builder 属性、类型和默认值;简单模式与开发者模式;schema、export、preview、persistence、RTL、templates 和 toolbox 配置;字段 drag-start、drag-over、drop 和 property-changed 事件负载),以及 Angular 设置与模块注册、基础用法、将表单 schema 绑定到组件、最小可用示例。
  • form-schema.md(建议优先阅读):schema 属性与根 schema 结构、properties 中的字段定义与 layout 中的渲染顺序、表单设置、支持的 widget 和布局容器、将请求的字段匹配到已记录的 widget 和类型。
  • validations.md:验证规则。
  • conditions.md:条件行为。
  • expressions.md:计算值。
  • dependent-dropdown.md:依赖下拉。
  • min-max-range.md:动态数值/日期/时间边界。
  • remote-data-binding-in-components.md:远程下拉、多选或复选框组数据。
  • data-grid-features.md:Data Grid 字段和数据源。
  • field-components-panel.md:Fields 与 Templates 标签页、Basic/Advanced/Layout 分类、搜索/过滤行为与工具箱自定义、自定义模板库和 formTemplates。
  • property-panel.md:面板在选中字段时出现、Display/Validation/Conditions/Layout/Data 标签页、setProperty 与 getProperty 模式、自动保存与属性刷新行为。
  • preview-tab.md:预览标签页工作流、使用 enablePreview 禁用预览、JSON schema 查看与复制操作。
  • templates.md:使用 e-toolboxitemsetting 定义自定义工具箱模板、导出时使用 templateId、将第三方组件映射到 schema。
  • form-settings.md:全局表单标题和宽度、布局级设置(如 Hide Label、Size、Float Label Type)、在不影响单个字段的情况下应用表单级配置。
  • export-import.md:导出 schema 供 Form Renderer 复用、将已有 schema 导回 Form Builder、使用 allowExport 禁用导出。

快速开始

安装包:

ng add @syncfusion/ej2-angular-form-builder

导入 Form Builder 模块并绑定初始 schema:

import { Component, ViewChild } from '@angular/core';
import { FormBuilderComponent, FormBuilderModule } from '@syncfusion/ej2-angular-form-builder';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [FormBuilderModule],
  template: `
    <ejs-form-builder #formObj [schema]="schema"></ejs-form-builder>
  `
})
export class AppComponent {
  @ViewChild('formObj') public formObj?: FormBuilderComponent;

  public schema = {
    version: '0.1.0',
    properties: {
      emailAddress: {
        id: 'textbox_1785491685456_167',
        name: 'emailAddress',
        type: 'string',
        label: 'Email Address',
        textboxType: 'email',
        required: true,
        placeholder: 'Enter your email',
        widget: 'textbox'
      }
    },
    layout: [
      { type: 'field', propertyId: 'emailAddress' }
    ],
    settings: {
      name: 'Untitled Form'
    }
  };
}

使用 ng serve 启动 Angular 应用,然后使用工具箱和属性面板编辑表单。主题设置、应用创建和完整初始设置见 references/getting-started.md。

常见模式

自定义工具箱:使用 toolboxCategories 控制工具箱中出现的字段类型及其分组分类。

public toolboxCategories = [
  {
    category: ComponentCategory.Basic,
    items: [FormWidgetType.Textbox, FormWidgetType.Textarea]
  },
  {
    category: ComponentCategory.Advanced,
    items: [FormWidgetType.Date, FormWidgetType.DateRange]
  }
];

动态添加属性:使用 setProperty 为 widget 添加自定义属性,并用 refresh() 更新面板。

this.formObj?.setProperty(FormWidgetType.Textarea, {
  key: 'enableRtl',
  label: 'Enable RTL',
  type: 'boolean',
  default: false
});

注册自定义模板:在 e-toolboxitemsettings 中定义第三方自定义控件,并在值变化时调用 setFieldValue。

<e-toolboxitemsetting [type]="formType">
  <ng-template #template let-data>
    <input [value]="data.value || ''" (input)="onInputChange($event, data)" />
  </ng-template>
</e-toolboxitemsetting>

使用预览和 JSON 输出:切换到 Preview 标签页验证布局和交互,然后打开 JSON 标签页查看导出的 schema 并复制,供 Form Renderer 使用。

其他常见做法:

  • 将每个字段保留在 properties 中,并在 layout 中通过其 propertyId 引用;
  • 为每个字段提供稳定的唯一 name 和 id,条件、表达式和依赖数据使用已记录的 id 与 name 引用;
  • 将请求的字段 widget 和类型匹配到 references/form-schema.md 中支持的 schema 清单;
  • 使用 toolboxCategories 或 toolboxItems 控制可视化工具箱中可用的字段;
  • 使用 formTemplates 保存可复用的完整 schema,使用自定义工具箱模板处理第三方控件;
  • 在 Preview 中验证表单,检查 JSON 标签页,仅在 schema 与 layout 正确后再导出;
  • 使用 API 事件负载获取设计器交互状态,使用 Form Renderer 事件处理运行时值和提交行为。

实现清单

在构建或修复 Form Builder 表单时,确认:

  • Angular 包和主题已安装,且 Form Builder 模块已导入;
  • schema 值为对象、JSON 字符串或受支持的 schema 实例;
  • 每个字段都有唯一 name、稳定 id、受支持的 widget 和匹配的 type;
  • 每个 layout 字段节点引用有效的 propertyId;
  • 布局容器保留在 layout 中,其子字段保留在 properties 中;
  • 验证、条件、表达式、范围和数据源使用已记录的引用结构;
  • 自定义模板通过 setFieldValue 更新 Form Builder 状态;
  • 根据所需工作流启用或禁用预览与导出;
  • drag 和 property-change 处理器使用 references/getting-started.md 中的事件名称和负载成员。

典型工作流

  1. 先创建基础 schema 并加载到 builder 中。
  2. 使用工具箱分类和预定义模板组织表单设计。
  3. 在右侧面板编辑字段属性,处理验证、布局和显示行为。
  4. 在导出 schema 前通过 Preview 验证最终表单。
  5. 之后可重新导入 schema 继续编辑或调整生成的表单。

限制

资料未提供价格、收费、平台兼容范围或效果数据。使用本技能时应以 Form Builder 的设计与编辑为边界,终端用户渲染与提交处理不属于本技能范围。