您好,欢迎访问一九零五行业门户网

动态生成form表单实现方法

使用iview动态创建form表单
具有数据收集、校验和提交功能的表单生成器,包含复选框、单选框、输入框、下拉选择框等元素以及时间选择,日期选择,颜色选择,文件/图片上传功能。
示例
安装npm install form-create
or
git clone https://github.com/xaboy/form-create.git cd form-create npm install
引入<!-- import vue --> <script src="node_modules/vue/dist/vue.min.js"></script> <!-- import iview --> <link rel="stylesheet" href="node_modules/iview/dist/styles/iview.css"> <script src="node_modules/iview/dist/iview.min.js"></script> <!-- import formcreate --> <script src="dist/form-create.min.js"></script>
使用let rules = [],el = document.body; new vue({   mounted:function(){     var $f = this.$formcreate(rules,el);   } })
$formcreate 参数rules  表单规则  [inputrule,selectrule,...]
el  插入的dom节点 默认为 document.body
$f 实例方法获得表单数据
$f.formdata()
修改表单数据
$f.changefield(field,value)
表单验证
$f.validate(successfn,errorfn)
表单验证指定字段
$f.validatefield(field,errorfn)
重置表单
$f.resetfields()
移除表单
$f.remove()
获得表单所有字段
$f.fields()
提交表单
$f.submit()
rules 规则:hidden 隐藏字段hiddenrule: {   type:hidden,   field:id, //字段名称   value:14 //input值 }
input 输入框inputrule : {   type:input,   title:商品名称, //label名称   field:goods_name , //字段名称   value:iphone 7, //input值,   props: {         type: text, //输入框类型,可选值为 text、password、textarea、url、email、date         clearable:false, //是否显示清空按钮         disabled: false, //设置输入框为禁用状态         readonly: false, //设置输入框为只读         rows: 4, //文本域默认行数,仅在 textarea 类型下有效         autosize: false, //自适应内容高度,仅在 textarea 类型下有效,可传入对象,如 { minrows: 2, maxrows: 6 }         number: false, //将用户的输入转换为 number 类型         autofocus: false, //自动获取焦点         autocomplete: off, //原生的自动完成功能,可选值为 off 和 on         placeholder: 请输入商品名称, //占位文本         size: default, //输入框尺寸,可选值为large、small、default或者不设置,         spellcheck: false //原生的 spellcheck 属性     },   validate:[      { required: true, message: 'mailbox cannot be empty', trigger: 'blur' },      { type: 'email', message: 'incorrect email format', trigger: 'blur' }    ] }
validate 表单验证规则,具体配置查看 : https://github.com/yiminghe/async-validator
radio 单选框radiorule : {   type:radio,   title:是否包邮,   field:is_postage,   value:0, //input值,   options:[     {value:0,label:不包邮,disabled:false},     {value:1,label:包邮,disabled:true}   ],   props: {         type:undefined, //可选值为 button 或不填,为 button 时使用按钮样式         size:default, //单选框的尺寸,可选值为 large、small、default 或者不设置         vertical:false //是否垂直排列,按钮样式下无效     },   validate:[] }
checkbox 复选框checkboxrule : {   type:checkbox,   title:标签,   field:label,   value:[     1,2,3   ],//input值,   options:[     {value:1,label:好用,disabled:true},     {value:2,label:方便,disabled:false},     {value:3,label:实用,disabled:false},     {value:4,label:有效,disabled:false}   ],   props: {         size:default //多选框组的尺寸,可选值为 large、small、default 或者不设置     },   validate:[] }
switch 开关switchrule : {   type:switch,   title:是否上架,   field:is_show,   value:1,//input值,   props: {         size:default, //开关的尺寸,可选值为large、small、default或者不写。建议开关如果使用了2个汉字的文字,使用 large。         disabled:false,//禁用开关         truevalue:1, //选中时的值,当使用类似 1 和 0 来判断是否选中时会很有用         falsevalue:0 //没有选中时的值,当使用类似 1 和 0 来判断是否选中时会很有用     },   slot: {     open:上架, //自定义显示打开时的内容     close:下架 //自定义显示关闭时的内容   }, //slot可以不用配置   validate:[] }
select 选择器selectrule : {     type: select,     field: cate_id,     title: 产品分类,     value: 104, //input值, multiple为true时 value为数组 [value,value,...]     props: {         multiple: false, //是否支持多选         clearable: false, //是否可以清空选项,只在单选时有效         filterable: false, //    是否支持搜索         // 暂不支持远程搜索         // remote: false, //是否使用远程搜索         // remote-method:()=>{}, //远程搜索的方法         // loading: false, //当前是否正在远程搜索         // loading-text: 加载中, //远程搜索中的文字提示         size:default, //选择框大小,可选值为large、small、default或者不填         placeholder: 请选择, //选择框默认文字         not-found-text: 无匹配数据, //当下拉列表为空时显示的内容         placement: bottom, //弹窗的展开方向,可选值为 bottom 和 top         disabled: false //是否禁用     },     options: [       {value: 104, label: 生态蔬菜, disabled: false},       {value: 105, label: 新鲜水果, disabled: false}     ] }
datepicker 日期选择器datepickerrule : {     type: datepicker,     field: section_day,     title: 活动日期,     value: 1519110955000 || new date(), //input值, type为daterange,datetimerange value为数组 [start_value,end_value]     props: {         type: date, //显示类型,可选值为 date、daterange、datetime、datetimerange、year、month         format: yyyy-mm-dd, //展示的日期格式         placement: bottom-start, //    日期选择器出现的位置,可选值为toptop-starttop-endbottombottom-startbottom-endleftleft-startleft-endrightright-startright-end         placeholder:请选择获得时间, //占位文本         confirm:false, //是否显示底部控制栏,开启后,选择完日期,选择器不会主动关闭,需用户确认后才可关闭         size:default, //尺寸,可选值为large、small、default或者不设置         disabled:false, //是否禁用选择器         clearable:true, //是否显示清除按钮         readonly:false, //完全只读,开启后不会弹出选择器         editable:false //文本框是否可以输入     },     validate:[] }
timepicker 时间选择器timepickerrule : {     type: timepicker,     field: section_time,     title: 活动时间,     value: [], //input值, type为timerange value为数组 [start_value,end_value]     props: {         type: timerange, //显示类型,可选值为 time、timerange         format: hh:mm:ss, //展示的时间格式         steps: [], //下拉列表的时间间隔,数组的三项分别对应小时、分钟、秒。例如设置为 [1, 15] 时,分钟会显示:00、15、30、45。         placement: bottom-start, //    时间选择器出现的位置,可选值为toptop-starttop-endbottombottom-startbottom-endleftleft-startleft-endrightright-startright-end         placeholder:请选择获得时间, //占位文本         confirm:false, //是否显示底部控制栏,开启后,选择完日期,选择器不会主动关闭,需用户确认后才可关闭         size:default, //尺寸,可选值为large、small、default或者不设置         disabled:false, //是否禁用选择器         clearable:true, //是否显示清除按钮         readonly:false, //完全只读,开启后不会弹出选择器         editable:false //文本框是否可以输入     },     validate:[] }
inputnumber 数字输入框inputnumberrule : {     type: inputnumber,     field: sort,     title: 排序,     value: 0, //input值     props: {         max: undefined, //最大值         min: undefined, //最小值         step: 1, //每次改变的步伐,可以是小数         size:default, //输入框尺寸,可选值为large、small、default或者不填         disabled:false, //设置禁用状态         readonly:false, //是否设置为只读         editable:true, //是否可编辑         precision:0 //数值精度     },     validate:[] }
colorpicker 颜色选择器colorpickerrule : {     type: colorpicker,     field: coloe,     title: 颜色,     value: '#ff7271', //input值     props: {         alpha: false, //是否支持透明度选择         hue: true, //是否支持色彩选择         recommend: false, //是否显示推荐的颜色预设         size:default, //尺寸,可选值为large、small、default或者不设置         colors:[], //自定义颜色预设         format:hex //颜色的格式,可选值为 hsl、hsv、hex、rgb,开启 alpha 时为 rgb,其它为 hex     },     validate:[] }
upload 上传uploadrule : {     type: upload,     field: pic,     title: 轮播图,     value: [], //input值     props: {         type:select, //上传控件的类型,可选值为 select(点击选择),drag(支持拖拽)         action: , //上传的地址,必填         headers: {}, //设置上传的请求头部         multiple: false, //是否支持多选文件         data:{}, //上传时附带的额外参数         name:, //上传的文件字段名         with-credentials:false, //支持发送 cookie 凭证信息         show-upload-list:true, //是否显示已上传文件列表         accept:, //接受上传的文件类型         format:[], //支持的文件类型,与 accept 不同的是,format 是识别文件的后缀名,accept 为 input 标签原生的 accept 属性,会在选择文件时过滤,可以两者结合使用         max-size:undefined, //文件大小限制,单位 kb         beforeupload:()=>{}, //上传文件之前的钩子,参数为上传的文件,若返回 false 或者 promise 则停止上传         onprogress:()=>{}, //文件上传时的钩子,返回字段为 event, file, filelist         onsuccess:( push, response, file, filelist)=>{           let filepath = response.data.filepath;           push(filepath);           //其他操作         }, //文件上传成功时的钩子,返回字段为 push, response, file, filelist.  push(filepath) 将上传后的路径添加到value中         onerror:()=>{}, //文件上传失败时的钩子,返回字段为 error, file, filelist         onpreview:()=>{}, //点击已上传的文件链接时的钩子,返回字段为 file, 可以通过 file.response 拿到服务端返回数据         onremove:()=>{}, //文件列表移除文件时的钩子,返回字段为 file, filelist         onformaterror:()=>{}, //文件格式验证失败时的钩子,返回字段为 file, filelist         onexceededsize:()=>{}, //文件超出指定大小限制时的钩子,返回字段为 file, filelist         default-file-list:[             {                 name: 'img1.jpg',                 url: 'http://www.xxx.com/img1.jpg'             },             {                 name: 'img2.jpg',                 url: 'http://www.xxx.com/img2.jpg'             }         ] // 默认已上传的文件列表     },     validate:[] }
accept 文件类型: https://developer.mozilla.org/en-us/docs/web/html/element/input#attr-accept
相关推荐:
form实现自动提交代码分享
html的form标签用法
javascript实现动态添加form表单元素的方法示例
以上就是动态生成form表单实现方法的详细内容。
其它类似信息

推荐信息