做爲一名前端開發,「表單開發」是咱們的屢見不鮮,通常咱們須要作如下重複性工做:javascript
同時,後臺服務也須要編寫校驗規則,隨着業務變更或者溝通不及時,先後端校驗規則可能會存在不一致問題。因此「先後端共用校驗規則邏輯」也應該歸入考慮。html
綜上,咱們但願能減小重複性工做:經過配置自動生成表單模板,同時這個配置最好還能描述表單校驗相關(由於表單元素部分屬性如min、max、required、pattern這些都會控制表單輸入,保障校驗)前端
<template>
<vue-form
:schema="schema"
:model="model"
>
</vue-form>
</template>
<script>
export default {
data () {
return {
schema: {
title: 'basic',
type: 'object',
properties: {
name: {
type: 'string',
title: '姓名'
},
phone: {
type: 'string',
title: '手機',
pattern: '^1[3578]\\d{9}$',
description: '請輸入正確的手機號碼'
}
},
required: ['name', 'phone']
},
model: {
name: 'xxx'
}
}
}
}
</script>
複製代碼
渲染結果 java
而後,如今表單常常會經過JSON異步提交到服務端,因此技術選型以下:git
$ref、const keyword、$data reference
規則能夠更好複用一些基礎規則,同時完成相似於「密碼、重複密碼」等複雜校驗addFormat()、addKeyword()
能夠擴展規則,更容易實現自定義校驗最後,JSONSchema在表單描述上並不是無所不能:github
因此,咱們參考了angular schema form,增長了Form Definition
描述,用來補充擴展JSON Schema,它能夠:vuex
即便沒定義Form Definition,內部在表單渲染部分,也會將JSONSchema轉換成Form Definition,由於其結構更適合循環表單渲染npm
因此,總體架構如圖
目前已經提供了基礎組件11個
(包含圖片上傳、編輯器等擴展組件)和容器組件3個
,將來還會根據狀況繼續增長,同時也支持本身擴展組件和規則。