vue+element 基础组件(输入框,下拉框,日期框)二次封装

前言

组件库也已经上线运行了一段时间,该改的BUG也都解决了,也基本可以稳定运行了。今天就抽出点时间更新下文档方便日后查看!

背景

随着公司项目的迭代更新,业务需求越来越多,如果继续大规模使用element原生封装的组件,就会使得业务代码更加的繁琐并且难以维护。所以就决定把element进行二次封装,在封装之前查阅了一些资料,为了方便后期维护
最后决定分装成一个组件库!

设计思路

参考网上封装的思路,发现只是对el-input层进行封装,虽然在使用过程中可以简化一点使用代码,但是整体的封装层次不大。如果添加校验还是要和element一样单独添加relus,添加验证规则,如果这样的话封装的意义就不大了。
所以经过多方考虑直接把 el-form-item封装进去的话就可以把验证方法和正则规则一起封装到里面使用统一的验证方法和正则规则。

实现过程

一.封装输入框的核心用法就是实现组件的双向绑定,可以使得绑定的v-model用法和elelment保持一致
通过绑定props里的value 保证父组件中,v-bind:value可以正常设置值,子组件可以取到值。
然后在watch里监听props里的value,将得到的值直接赋值给当前页面的v-model
二.封装统一的验证规则

1.在el-form-item 里绑定rules验证,通过checkHour方法添加自定义校验参数

 :rules="[
       {
          required: prop && isRequired ? true : '',
          validator: (rule, value, callback) => {
            checkHour(rule, value, callback);
          }, //后面的这几个是传的自定义参数
          notrigger: 'blur',
        }
      ]"

checkHour(rule, value, callback) {
      if (this.sgccInputType == "mobile") {
        mobile(rule, value, callback, this.sgccLabelName); //手机号
      }else if (this.sgccInputType == "sgcustom") {
        sgcustom(rule, value, callback, this.custom, this.isempty); //自定义校验
      } else if (this.prop) {
        isCong(rule, value, callback, this.sgccLabelName); //空
      } else {
        callback();
      }
    },

2.添加验证方法js文件

/* 手机号 */
export function mobile(rule, value, callback,sgccLabelName = '内容') {
  const reg = /^1[3456789]\d{9}$/ 
  if (value == '' || value == undefined || value == null) {
      callback(new Error(`${sgccLabelName}不能为空`));
  } else {
      if ((!reg.test(value)) && value != '') {
          callback(new Error(`${sgccLabelName}填写错误,请重新填写`));
      } else {
          callback();
      }
  }
}
/* 自定义校验规则 */
export function sgcustom(rule, value, callback,sgrule,isempty = true) {
  // rule, 
  // value, //输入的值
  // callback,//回调检验
  // sgrule,//正则规则
  // isempty = false//是否校验 ‘是否为空’,默认校验

  // console.log(typeof sgrule)
  // console.log(value)
  // console.log(callback)
  // console.log(sgrule)
  let setsgrule = {error : "",atest : ""};
  if(typeof sgrule === 'string') setsgrule.error = sgrule;
  else setsgrule = sgrule;
  
  if (!value) {
    if(isempty) callback(new Error('内容不能为空'));
    else callback();
  } else {
    if ((!setsgrule.atest.test(value)) && value != '') {
      callback(new Error(setsgrule.error));//错误提示
    } else {
      callback();
    }
  }
}

3.自定义正则验证单独创建一个正则js全局注册

export default {
  QQ: { atest: /^[1-9]*[1-9][0-9]*$/, error: '不正确的腾讯QQ号' },
}
三.根据业务需求封装需要的输入参数(前置btn,后置bth,后置文字信息,错误提示信息,划过提示等...)
四.创建组件库项目,将封装好的基础组件(input,select,date,radio,dialog)等,放进去统一注册然后打包生成一个js文件,在其他项目里引用这个js就可以使用(后期可以发布到npm上)

组件库项目搭建思路后期单独写一篇文章

实现效果

例如input组件
<sg-input
     sgccLabelName="QQ号"
     v-model="sgFrom.QQ"
     prop="QQ"
     sgccInputType="sgcustom"
     :custom="$RegExp.QQ"
></sg-input>

总结

封装之后大幅缩减了代码数量并且也方便维护,同时也使得页面更加整洁。
其他的下拉框,日期框,单选框,弹窗都是相同的封装思路。
持续更新。。。

参考网站

element

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容