当前位置: 首页 > Web前端 > HTML5

如何优雅的使用elementUI的form

时间:2023-04-05 21:34:15 HTML5

?elementUI的表单< titlesplit >如何使用?前端小伙伴有和我一样的烦恼,每次写个表格就烦。这东西没什么难度,纯手工活。项目中如果用到UI库,基本上每次都是按照官网例子复制粘贴。假设项目使用vue+elementUI,这种代码经常出现data(){return{data1:0,data2:1,data3:2,data4:3,}}方法:{onchange(value){.........}}我故意写这个是为了简单。如果属性和事件多了,这个页面很可能会发展成我们以后做程序最怕的东西。.老板:“小陈,XXX离职了,你接手XXX档案,不难,就是有点乱,只有一万多行。”我心:“尼玛,明明几行代码加一个配置文件就搞定了,你摇摇我”开启重构之路(本文以vue+elementUI为例,主要是idea而不是代码)来分析代码,找出异同:elementUI中每一个表单元素的最外层都是

,每一个item都被包裹着,每一个具体的表单元素都在的形式,每个元素可以通过value或者v-model来绑定数据。都有一些共同的属性和事件,比如变化。除了select,其他的元素都可以写在一行中。不同点:每个元素都有个性化的属性和方法,比如支持type属性,支持max和min属性。设计思路、代码实现用一个数组对象来表示表单,每一项都是一个对象,里面包含了表单标签、标签名称标签、绑定字段模型、标题标签中用到的所有属性。用一个对象来表示值,键值就是声明在表单数组中的值。//表单数组letformList=[{tag:'input',model:'name',label:'name'},{tag:'input-number',model:'age',label:'age'},{tag:'switch',model:'working',label:'Workingornot'},]//表单值letformData={name:'小陈',age:26,working:false,}数据输入和output确认后,需要确定实现方式,可以写成vue组件。组件接受两个props:[formList,formData],然后遍历formList,根据标签使用动态组件渲染对应的标签,v-mode传入的模型字段。然后将标签传递给,解决区别,最大的区别就是每个元素使用了很多个性化的属性和事件,而除了表单元素,``也有很多属性和事件,如果这些都是通过props声明的,太多了,不容易分清谁属于谁。所以需要使用vue的$attrs和$listeners,通过$attrs和$listeners批量绑定属性和事件,修改formList的数据格式让formList=[{tag:'input',label:'name',model:'name',attrs:{//个性化属性type:'textarea'},listeners:{//个性化事件change:(value)=>console.log(value,'change'),blur:(value)=>console.log(value,'blur')}}]同时记得单独处理select标签,最终代码为``````*注:本例默认全局注册elementUI*Effect效果代码