# 快速开始
# 安装
由于 FormBuilder 通过 Vue Use 提供的 useForm Composition API 来管理表单状态,同时依赖 vee-validate 来进行表单校验,因此需要一起进行安装:
npm i @fext/vue-form-builder @fext/vue-use vee-validate
# 核心类库依赖
- vue >=
2.6.0
- @vue/composition-api >=
0.5.0
# 默认组件
若需要进行动态配置的表单组件已经全局注册,则可以直接使用内置的 FormBuilder
组件。
# 引入方式
直接引入 FormBuilder
组件:
import { FormBuilder } from '@fext/vue-form-builder';
此外,你也可以通过插件将 FormBuilder
注册为全局组件:
import FormBuilderPlugin from '@fext/vue-form-builder';
Vue.use(FormBuilderPlugin);
# 使用方式
在父级组件中,需要先通过 useForm
创建表单的 Composition API,并提供表单的 JSON 配置:
import { useForm } from '@fext/vue-use';
import { FormBuilder } from '@fext/vue-form-builder';
export default {
name: 'awesome-form'
components: {
FormBuilder
},
setup() {
// Form Composition API
const form = useForm();
const { formValues, updateFormValues } = form;
return {
form
/* 表单数据模型 */
formValues,
/* 手动更新表单数据模型 */
updateFormValues
};
},
data() {
return {
formConfig: [/* JSON Schema */]
}
}
}
模板结构:
<div>
<form-builder :form="form" :config="formConfig"></form-builder>
</div>
# 工厂函数
很多情况下,我们并不希望将所有的表单组件都注册到全局。此时我们可以使用工厂函数 createFormBuilder
构建一个定制化的 FormBuilder
。
import { useForm } from '@fext/vue-use';
import { createFormBuilder } from '@fext/vue-form-builder';
import ExampleFormComponents from 'path/to/components';
export default {
name: 'awesome-form'
components: {
FormBuilder: createFormBuilder({
components: {
...ExampleFormComponents
}
})
}
/* ... */
}
# 框架适配器
在一些流行的 UI 框架中,已经实现了很多表单基础组件,为了让你能够快速使用这些组件,我们提供了几种适配器。
实际开发过程中,你也可以根据需要封装自己的适配器。
# Element UI
组件 ElFormAdaptor
引入方式:
import ElFormAdaptor from '@fext/vue-form-builder/lib/adaptor/element';
或全局注册:
import ElFormAdaptorPlugin from '@fext/vue-form-builder/lib/adaptor/element';
Vue.use(ElFormAdaptorPlugin);
# View UI
组件 ViewFormAdaptor
引入方式:
import ViewFormAdaptor from '@fext/vue-form-builder/lib/adaptor/view';
或全局注册:
import ViewFormAdaptorPlugin from '@fext/vue-form-builder/lib/adaptor/view';
Vue.use(ViewFormAdaptorPlugin);
# Ant Design Vue
import AntFormAdaptor from '@fext/vue-form-builder/lib/adaptor/antd';
或全局注册:
组件 AntFormAdaptor
引入方式:
import AntFormAdaptorPlugin from '@fext/vue-form-builder/lib/adaptor/antd';
Vue.use(AntFormAdaptorPlugin);
# 完整示例
下面我们通过工厂函数和 Element UI 适配器演示一下实际用法:
<el-form>
<form-builder :form="form" :config="formConfig"></form-builder>
</el-form>
import { useForm } from '@fext/vue-use';
import { createFormBuilder } from '@fext/vue-form-builder';
import ElFormAdaptor from '@fext/vue-form-builder/lib/adaptor/element';
export default {
components: {
FormBuilder: createFormBuilder({
components: {
ElFormAdaptor
}
})
},
setup() {
const form = useForm();
const { formValues, updateFormValues } = form;
return {
form,
/* 表单数据模型 */
formValues,
/* 手动更新表单数据模型 */
updateFormValues
};
},
data() {
return {
formConfig: [
{
component: 'el-card',
props: {
header: 'Basic Group'
},
fields: [
{
name: 'comment',
component: 'ElFormAdaptor',
label: 'Description',
rules: {
required: true
},
props: {
type: 'textarea',
rows: 5,
placeholder: 'Use adaptor and render with default(el-input) component'
}
}
]
}
]
};
}
};