前端组件库 ——FormMaking 知识点大全(三)

简介: 教程来源 https://bncne.cn FormMaking 提供 `GenerateForm` 动态渲染表单,支持远程数据加载、数据校验与操作;支持 JSON 存储或元数据分离的数据方案;开放源码,可扩展属性、自定义组件及图标;针对大型表单,提供懒加载、虚拟滚动等性能优化策略。

五、表单渲染与数据交互

5.1 生成器组件(GenerateForm)使用

<template>
  <fm-generate-form
    ref="generateForm"
    :data="formJson"
    :remote="remoteFuncs"
    :value="formData"
  />
</template>

<script>
export default {
  data() {
    return {
      formJson: {},      // 表单 JSON 配置
      formData: {},      // 表单数据
      remoteFuncs: {     // 远程方法注册
        // 注册远程数据获取方法
        getUserList: (resolve) => {
          fetch('/api/users').then(res => res.json()).then(data => {
            resolve(data)
          })
        }
      }
    }
  },
  methods: {
    // 获取表单数据
    getFormData() {
      return this.$refs.generateForm.getData()
    },
    // 重置表单
    resetForm() {
      this.$refs.generateForm.reset()
    },
    // 验证表单
    validateForm() {
      this.$refs.generateForm.validate().then(valid => {
        if (valid) {
          console.log('验证通过')
        }
      })
    }
  }
}
</script>

5.2 表单数据存储方案
在企业级应用中,动态表单的数据存储是一个关键问题。FormMaking 生成的 JSON 配置需要与业务数据结合,形成完整的表单解决方案。以下是几种常见的数据存储方案:

方案一:JSON 字段存储

在业务表中增加一个 JSON 类型字段(如 extension_data),将表单配置和表单数据以 JSON 格式存储。这种方案灵活性强,适用于字段不固定的动态表单场景。后端实体需增加对应字段,如 ExtensionData(扩展 JSON 数据)。

方案二:元数据 + 数据表分离

元数据表:存储表单的 JSON 配置,包括字段结构、布局信息等

数据表:存储用户提交的表单数据,与元数据表通过 form_id 关联

这种方案适合需要频繁查询和分析表单数据的场景。

六、二次开发与高级定制

6.1 获取源码与本地开发

# 克隆项目
git clone https://github.com/GavinZhuLei/vue-form-making.git

# 安装依赖
npm install

# 运行开发服务器
npm run serve

# 打包设计器(打包后会生成 dist/ 目录)
npm run build-bundle

开发时需要注意:运行启动的项目是引用设计器的官方示例代码,设计器源码位于 src/components 目录下。

6.2 扩展表单属性
FormMaking 支持通过修改源码扩展表单级别的配置属性:

步骤 1:在 src/components/Container.vue 中添加表单配置属性

data() {
  return {
    widgetForm: {
      list: [],
      config: {
        labelWidth: 100,
        labelPosition: 'top',
        size: 'small',
        // 在此处扩展表单的配置信息
        customProperty: 'custom value'
      }
    }
  }
}

步骤 2:在 src/components/FormConfig.vue 中添加对表单新属性的配置界面

步骤 3:在 src/components/GenerateForm.vue 中添加新属性的渲染逻辑

6.3 扩展自定义组件
FormMaking 支持开发者引入自定义组件,满足特定业务需求。

步骤 1:在 src/components/componentsConfig.js 中添加组件配置信息

{
  type: 'custom-component',  // 组件类型,保持唯一
  name: '自定义组件',         // 组件展示名称
  icon: 'icon-custom',       // 组件图标
  options: {
    defaultValue: '',        // 默认值
    customProp: ''           // 自定义属性
  }
}

步骤 2:在 src/components/WidgetFormItem.vue 和 src/components/GenerateFormItem.vue 中引入并注册自定义组件

import CustomComponent from 'your-component-path'

export default {
  components: {
    CustomComponent
  }
}

步骤 3:在 src/components/WidgetConfig.vue 中添加自定义组件的属性配置界面

6.4 自定义图标
项目使用的是阿里字体图标库(iconfont)。如需自定义图标,请将图标加入到自己的项目中,选择 Font class,将代码下载到本地替换 src/iconfont 文件夹下的文件。

七、性能优化

7.1 典型性能问题
在使用 FormMaking 构建复杂表单应用时,当页面需要同时渲染多个表单或表格时,可能会遇到性能问题。其根本原因在于 DOM 节点的过度渲染和内存管理机制:

每个表格组件都会创建大量 DOM 节点

Vue 需要维护大量虚拟 DOM 节点,增加 diff 算法的计算负担

表格组件可能没有正确释放内存,导致内存持续增长

7.2 优化解决方案
方案一:组件懒加载

实现表格的按需渲染,只有当表格进入可视区域时才进行渲染:

import { defineAsyncComponent } from 'vue'

export default {
  components: {
    LazyTable: defineAsyncComponent(() => import('./LazyTable.vue'))
  },
  methods: {
    isVisible(index) {
      // 实现可视区域检测逻辑
    }
  }
}

方案二:分页与虚拟滚动

对于大型表格数据,必须实现分页或虚拟滚动技术,只渲染当前可视区域内的数据,避免一次性渲染所有 DOM 节点。

方案三:数据优化

使用 Object.freeze 冻结不需要响应式的数据,可以减少 Vue 的响应式系统开销:

// 冻结大数据集,阻止 Vue 将其转换为响应式对象
this.tableData = Object.freeze(largeDataSet)

方案四:组件销毁清理

确保不使用的表格组件能够被正确销毁,释放内存资源:

import { onBeforeUnmount } from 'vue'

export default {
  setup() {
    onBeforeUnmount(() => {
      // 清除定时器、取消网络请求、移除事件监听
    })
  }
}

来源:
http://yvyus.cn

相关文章
|
1天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23255 1
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
2天前
|
人工智能 API 开发工具
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)
Claude Code是我目前最推荐的AI编程工具,没有之一。 它可能不是最简单的,但绝对是上限最高的。一旦跑通安装、接上模型、定好规范,你会发现很多原本需要几小时的工作,现在几分钟就能搞定。 这套方案的核心优势就三个字:可控性。你不用依赖任何不稳定服务,所有组件都在自己手里。模型效果不好?换一个。框架更新了?自己决定升不升。 这才是AI时代开发者该有的姿势——不是被动等喂饭,而是主动搭建自己的生产力基础设施。 希望这篇保姆教程,能帮你顺利上车。做出你自己的作品。
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)
|
10天前
|
缓存 人工智能 自然语言处理
我对比了8个Claude API中转站,踩了不少坑,总结给你
本文是个人开发者耗时1周实测的8大Claude中转平台横向评测,聚焦Claude Code真实体验:以加权均价(¥/M token)、内部汇率、缓存支持、模型真实性及稳定性为核心指标。
4087 23
|
5天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
2359 5
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
6天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
2794 8
|
22天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
19624 61
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
3天前
|
SQL 人工智能 弹性计算
阿里云发布 Agentic NDR,威胁检测与响应进入智能体时代
欢迎前往阿里云云防火墙控制台体验!
1173 2