前言

formily 不是一个简单的前端轮子。Formily 是一个由阿里巴巴集团多 BU 共建的面向中后台复杂场景的表单解决方案,它也是一个表单框架。它的前身是供应链平台在 2019 年初对外开源的 UForm 解决方案,UForm 的前身又是在供应链平台内部自研的某个表单框架。总体来看,Formily 是一个经过了漫长时间所磨炼,沉淀出来的表单解决方案。

它解决什么问题?

如果你们的后台有超级多的表单,那么选它没得问题。中台我觉得是一个复杂的概念,如果你们公司一直说这个事儿,那么这个formily可以是你的技术池(备胎)。它有复杂的表单联动,表单校验,满足大部分表单的需求,平时使用的都是非常简单的表单。一份JSON就可以实现复杂的表单,开箱即用。

开箱即用的栗子

说实话,这玩意唯一的缺点不是文档写的不好,而是不管用VUE人的死活。除了@formily/vue里面的栗子用了VUE,其他的所有栗子都是React。一个表单提交,我整整花了两个小时(是我菜了),下面我会重点提出来的。npm啥的我就不说了。官方文档都有

注意: 这里的技术栈是 VUE + Formily + element UI

// form.vue
<template>
<ElForm class="flex flex-column" label-width="180px">
<FormProvider :form="form">
<SchemaField
:schema="schema"
/>
<FormConsumer>
<!-- 非常重要!!!! FormConsumer必须是这个位置 才能表单消费 -->
<template #default="{ form }">
<button @click='form.submit'></button> //官方文档根本不管VUE的死活在这里!!!
</template>
</FormConsumer>
</FormProvider>
</ElForm>
</template> <script>
import { createForm, onFormValuesChange, onFormSubmit } from '@formily/core' //必须要引入
import { FormProvider, createSchemaField, FormConsumer } from '@formily/vue' //vue
import { Input } from 'element' //初次上手建议 就直接引用element UI 组件就可以了 const { SchemaField } = createSchemaField({
Input
}) //代表你需要这个生成器给你生成什么样的表单组件 export default {
components: { FormProvider, SchemaField, FormConsumer },
data() {
return {
form: createForm({effects: this.useEffects}), //生成表单的方法,传入监听的参数
schema: null
}
},
mounted() {
this.schema = {
type: 'object',
properties: {
name: {
type: 'string',
title: '名称',
required: true,
'x-component': 'Input'
}
}
}
},
methods: {
useEffects() {
onFormValuesChange(form => { //监听数据变化了
console.log(form) //这个form 很重要 这里你才能够拿到表单的值
})
onFormSubmit(form => { //监听表单提交
console.log(form)
})
},
}
}

避雷指南

我非常理解一个坑对于做这个功能的人,有多么令人崩溃。官方文档的栗子,要么没有告诉你怎么提交的,要么就是拿着@formily/nextSubmit,@formily/next 是基于 Fusion Design 封装的针对表单场景专业级(Professional)组件库。但我们不是有了element UI 组件了吗?大可不必

总结

这是一个非常入门级的源码,而且我的业务才刚刚开始做,上百个表单等我实现,应该还有下一个避雷指南。而且对于element 二次封装也很可以。复杂的表单有复杂的UI,不是一个element 单一组件就可以漂亮实现。下一期介绍formily 的一些概念,虽然我也是临时抱佛脚,周末学习了formily,大家一起探讨。不知道掘金有没有问题答疑~我是真的没有看到有很多formily文章输出

Formily教程 | formily是中后台复杂场景的表单解决方案的更多相关文章

  1. jsp中普通按钮如何提交表单

    jsp中普通按钮如何提交表单方法1: <form action = "提交的地址">         <input type="submit" ...

  2. struts2中token防止重复提交表单

    struts2中token防止重复提交表单 >>>>>>>>>>>>>>>>>>>&g ...

  3. Winform开发框架中工作流模块的业务表单开发

    在我们开发工作流的时候,往往需要设计到具体业务表单信息的编辑,有些是采用动态编辑的,有些则是在开发过程中处理的,各有各的优点,动态编辑的则方便维护各种各样的表单,但是数据的绑定及处理则比较麻烦,而自定 ...

  4. iframe中使用模态框提交表单后,iframe加载父页面的解决方法

    在iframe中使用模态框提交表单后,会出现iframe加载整个父页面的问题,如下图: 解决方法: 在form表单中添加target属性 _parent 这个属性会使目标文档载入父窗口或者包含来超链接 ...

  5. Django笔记&教程 6-3 使用模型(models)创建表单(form)

    Django 自学笔记兼学习教程第6章第3节--使用模型(models)创建表单(form) 点击查看教程总目录 本文参考:Forms for models 1 - 初步介绍 很多时候,我们使用的表单 ...

  6. jeecg中vaildfrom的复杂的表单校验

    简介 jeecg生成的页面都是使用validfrom组件来确保数据的完整性和准确性. 凡要验证格式的元素均需绑定datatype属性,datatype可选值内置有10类,用来指定不同的验证格式. 如果 ...

  7. 在火狐、360等浏览器中,用jquery创建表单并发送的问题

    某些浏览器无法使用js或者jquery直接创建表单并发送,这是由于这些浏览器在提交页面表单时要求页面有完整的标签项即<html><head><title></ ...

  8. lavarel框架中如何使用ajax提交表单

    开门见山,因为laravel以post形式提交数据时候需要加{{csrf_field()}}防止跨站攻击,所以当你用ajax提交表单时候自然也要加 在网上看了很多的解决方式,我是用下面这种方法解决的: ...

  9. ASP.NET MVC 中将数据从View传递到控制器中的三种方法(表单数据绑定)

    http://www.cnblogs.com/zyqgold/archive/2010/11/22/1884779.html 在ASP.NET MVC框架中,将视图中的数据传递到控制器中,主要通过发送 ...

随机推荐

  1. Angular环境搭建及简单体验

    一.安装开发环境 npm install -g typescript npm install -g @angular/cli 二.创建hello-world项目 创建项目 ng new angular ...

  2. 【无人机航空摄影测量精品教程】目录:摄影测量、Pix4d、EPS、CC、PhotoScan项目化作业流程及注意事项汇总

    目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 该专栏为目前最为热门的无人机航测内外业项目,主要内容包括:无人机航测外业作业流程(像控点布设.航线规划.仿地飞行.航拍)和内业数据 ...

  3. jQuery的链式编程风格

    jQuery的链式编程风格 首先本人通过一个案例来展示jQuery的链式编程风格.先写一个页面,展示一个列表,代码如下: <body> <div> <ul class=& ...

  4. Windows 下QT程序发布

    方法1:利用QT自带打包工具 1.新建文件夹,把编译好的exe文件放入该文件夹 2.使用QT下的命令行 3.进入该exe所在文件,执行windeployqt xxx.exe,若出现找不到命令的情况 4 ...

  5. VBScript学习第一天

    编码工具:VbsEdit 1.MsgBox() 毫无例外,第一个要学的就是"Hello, World!" 直接输入: MsgBox ("Hello, World!&quo ...

  6. 云ERP真的已经玩不转了吗?

    欢迎关注微信公众号:sap_gui (ERP咨询顾问之家) 注:以下云ERP特指Saas ERP,非指ERP系统部署在云端. 不得不说,如今市场对传统ERP的接受度要远比云ERP高得多,95%的中大型 ...

  7. 情景剧:C/C++中的未定义行为(undefined behavior)

    写在前面 本文尝试以情景剧的方式,轻松.直观地解释C/C++中未定义行为(undefined behavior)的概念.设计动机.优缺点等内容1,希望读者能够通过阅读本文,对undefined beh ...

  8. 计算机网络-vlan划分

    1.VLAN的划分 (1)基于端口的VLAN: 交换机A上的1,2端口和交换机B上的3,4端口构成一个VLAN. 交换机A上的3,4端口和交换机B上的1,2端口构成一个VLAN. (2)基于MAC地址 ...

  9. 5.22考试总结(NOIP模拟1)

    5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...

  10. 一个例子让你秒懂 Qt Creator 编译原理

    小北师兄作品 首发于微信公众号 小北师兄 微信 ID: ncuneupa 由于排版原因,文章可能读起来不太清晰,如果想看更好的排版,可以来我的公众号:小北师兄 大家好,我是你们的小北师兄,由于工作原因 ...