# 组件

ng-form对外主要暴漏 表单配置(ng-form-design)和表单填写/回显(ng-form-build)两个组件。

# 1、表单配置组件

表单配置组件ng-form-design包含组件列表、绘制面板、属性面板三部分,将组件拖拽至绘制面板后,通过属性配置,最终得到一个动态表单json数据。

表单配置组件

# 基础用法

直接通过标签 ng-form-design 来使用即可。例如:

<template>
    <div> 
        <ng-form-design />
    </div> 
</template>
<script>
    export default { 
    }
</script>

# 方法

方法名称 参数 返回值 说明
initModel json N/A 初始化动态表单内容,参数为动态表单json模板
getModel N/A json 返回当前正在编辑得动态表单信息

# 属性

属性名 说明 格式 默认值
custom-components 自定义组件的配置数组 array N/A
config 表单的一些基础配置,目前为http请求配置和数据字典 object N/A
clear 是否显示面板上清除按钮 boolean true
preview 是否显示面板上预览按钮 boolean true
imp 是否显示面板上导入按钮 boolean true
exp 是否显示面板上导出按钮 boolean true
basic-item 基础组件是否要展示或待选组件列表集合 boolean/Array true
decorate-item 个性化组件是否要展示或待选组件列表集合 boolean/Array true
layout-item 布局组件是否要展示或待选组件列表集合 boolean/Array true
application-item 应用组件是否要展示或待选组件列表集合 boolean/Array true

# 插槽

插槽名称 说明
drag 左侧组件面板插槽,可以在组件面板上面填充一个区域展示内容
form-name 当前动态表单名称 (ng-form-element废弃)
control-button 功能区按钮,如果需要自定义功能按钮可以在这里自定义

插槽示例:


<template>
    <ng-form-design :clear="false" :preview="false" :reder="false" :imp="false" :exp="false">
        <template slot="controlButton" >
            <el-button   type="text" size="mini" >示例1</el-button>
            <el-button   type="text" size="mini" >示例2</el-button>
            <el-button   type="text" size="mini" >示例3</el-button>
        </template>
        <template  slot="formName">
            <span> ng-form-element 示例 </span>
        </template>
    </ng-form-design> 
</template>
<script>
    export default {

    }
</script>

# 2、表单填报/回显组件

表单渲染器提供根据配置好的表单进行填报页面绘制和基于配置的表单和填报的数据进行展示的两大功能。

# 方法

方法名称 参数 返回结果 说明
reset N/A N/A 重置动态表单内容
validate N/A Promise 根据设置的规则验证当前表单内容,返回Promise
getData boolean Promise/JSON 表单验证后,获取当前表单数据,当入参为false时返回Promise

# 属性

属性名 说明 格式 默认值
form-template 表单模板 json
models 表单填充数据 json
disabled 是否禁用 boolean false
render-preview 当前是否为预览模式-废弃 boolean false
preview 当前是否为预览模式 boolean false
config 表单的一些基础配置,目前为http请求配置和数据字典 object N/A
custom-components 自定义组件的配置,具体参加最下方自定义组件示例中的格式 array N/A

# 表单填报

# 基础用法

使用ng-form-build组件,绑定要使用的动态表单模板即可。


<template>
    <div style="padding: 20px;"> 
        <ng-form-build ref="formBuild" :formTemplate="form" />

        <div style="text-align: center;"> 
      		<el-button type="primary" size="mini" @click="dataFormSubmit()">提交</el-button>
        </div>
    </div> 
</template>
<script>
export default { 
   	data() {
    	return {
    		form: {} // 表单配置json
    	}
    },
    methods: {
    	dataFormSubmit() {
    		// 获取表单填报数据 
    		const models = this.$refs.formBuild.getData(false)

    		console.log('表单提交:' , JSON.stringify(models))
    	}
    }
}

# 表单效验

表单在填写时默认触发为 失去焦点和数据改变触发,有些场景下需要我们手动效验整个表单,此时ng-form-build中提供了方法: validate 。



<template>
    <div style="padding: 20px;"> 
        <ng-form-build ref="formBuild" :formTemplate="form" />

        <div style="text-align: center;"> 
      		<el-button type="primary" size="mini"@click="dataFormValidator()">效验</el-button>
        </div>
    </div> 
</template>
<script>
export default { 
   	data() {
    	return {
    		form: {} // 表单配置json
    	}
    },
    methods: {
    	dataFormValidator() {
    		this.$refs.formBuild.validate((valid)=> {
    			console.log('valid' , valid)
    			this.$message('效验结果:' + valid)
    		})
    	}
    }
}
</script>

# 填报数据获取

获取填报数据使用getData 方法,当入参为true时(默认true),直接返回当前表单的填报json,当入参为false时,返回promise,resolve中返回表单的填报json。

<template>
    <div style="padding: 20px;"> 
        <ng-form-build ref="formBuild" :formTemplate="form" />

        <div style="text-align: center;"> 
      		<el-button type="primary" size="mini" @click="dataFormData1()">直接获取数据</el-button>
      		<el-button type="primary" size="mini" @click="dataFormData2()">效验后获取数据</el-button>
        </div>
    </div> 
</template>
<script>
export default { 
   	data() {
    	return {
    		form: {} // 表单配置json
    	}
    },
    methods: {
    	dataFormData1() {
    		const data = this.$refs.formBuild.getData() 
 			
    		this.$message('获取到数据:' + JSON.stringify(data))

    	},
    	dataFormData2() {
    		this.$refs.formBuild.getData(false).then((data)=> {
    			this.$message('效验后获取到数据:' + JSON.stringify(data))
    		}).catch(()=> {
    			this.$message('效验未通过' )
    		}) 
    	}
    }
}
</script>

# 表单查看

表单查看使用ng-form-build组件并传递preview=true即可。

<template>
    <div style="padding: 20px;"> 
        <ng-form-build ref="formBuild" :preview="true" :models="models"  :formTemplate="form" />
    </div> 
</template>
<script>
export default { 
   	data() {
    	return {
    		form: {} ,// 表单模板json
    		models: {} // 表单填报的数据json
    	}
    }
}
</script>
Last Updated: 11/4/2023, 4:07:24 PM