vue动态绑定组件子父组件多表单验证功能的实现代码


Posted in Javascript onMay 14, 2018

vue动态绑定组件子父组件多表单验证功能的实现代码

前端项目中经常会下拉或者选项卡,如果通过if,else或者switch去判断加载的话会产生大量冗余代码和变量定义,而且都写在一起后人很难维护。

Vue核心在于组件,如果有内容通过选项卡或者下拉框切换用动态加载子组件最好不过。

vue动态绑定组件子父组件多表单验证功能的实现代码

如图: selects文件夹中,index只负责公共数据(当然公共数据也可以写在其他文件,只留一个入口文件),而comp文件夹中的几个组件则通过动态加载。

动态加载子组件:component

// 给下拉框绑定下拉列表的索引
<el-select v-model="value" placeholder="请选择" style="float:left" @change="selectNum(value)">
     <el-option
         v-for="item in options"
         :key="item.value"
         :label="item.label"
         :value="item.value">
     </el-option>
</el-select>

引入组件后放到一个数组内,通过控制对应的索引达到加载组件的目的

vue动态绑定组件子父组件多表单验证功能的实现代码

// 加载组件:每次下拉框监听则给changValue新赋值,如果下拉options的value从0开始则绑定组件时不用-1
<component :is="componentName[changValue - 1]" ref="subjectChild" @isSubmit="getSubmit"></component>

子父组件表单一起验证:

按钮放在父组件内:

子组件:自定义验证规则

data(){
  const num = (rule, value, callback) => {
    let num = /^\d+$/
    if(!value){
      return callback(new Error('数量不能为空'))
    }else if(!num.test(value)){
      return callback(new Error('数量必须为数字'))
    }else{
      callback()
    }
  }
  const price = (rule, value, callback) => {
    let num2 = /^\d+$/
    if(!value){
      return callback(new Error('单价不能为空'))
    }else if(!num2.test(value)){
      return callback(new Error('单价必须为数字'))
    }else{
      callback()
    }
  }
  return{
    // 验证
    apple:{
      num: '',
      price: '',
    },
    reg:{
      num: [
        { validator: num, trigger: 'blur' }
      ],
      price: [
        { validator: price, trigger: 'blur' }
      ]
    }
  }
// 验证
  submitForm(){
    this.$refs.apple.validate((valid) => {
      if(valid){
        this.$emit('isSubmit',["subject",true])
      }else{
        this.$emit('isSubmit',["subject",false])
        return false
      }
    })
  }

父组件:

// 获取子组件状态
  getSubmit(type){
    this.isRule = type[1]
  },
// 公共数据验证
  submitForm2(){
    // 如果选中了子组件
    if(this.changValue){
      this.$refs.subjectChild.submitForm()
    }
    let _this = this
    let p1 = new Promise((resolve, reject) => {
      _this.$refs.ruleForm.validate((valid) => {
        if(valid){
          resolve()
        }
      })
    })
    if(_this.isRule){
      Promise.all([p1]).then(() => {
        console.log('正确')
      })
      .catch(() => {
        console.log('错误')
      })
    }else{
      console.log('错误')
    }
  },

总结

以上所述是小编给大家介绍的vue动态绑定组件子父组件多表单验证功能的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
利用javascript实现web页面中指定区域打印
Oct 30 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
Jan 07 Javascript
在Linux上用forever实现Node.js项目自启动
Jul 09 Javascript
你所未知的3种Node.js代码优化方式
Feb 25 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
May 26 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
Dec 01 Javascript
JS获取填报扩展单元格控件的值的解决办法
Jul 14 Javascript
jQuery选择器之子元素过滤选择器
Sep 28 jQuery
jQuery实现简单的回到顶部totop功能示例
Oct 16 jQuery
Angular中管道操作符(|)的使用方法
Dec 15 Javascript
npm qs模块使用详解
Feb 07 Javascript
vue父子模板传值问题解决方法案例分析
Feb 26 Javascript
jQuery中元素选择器(element)简单用法示例
May 14 #jQuery
jQuery中的类名选择器(.class)用法简单示例
May 14 #jQuery
vue引入js数字小键盘的实现代码
May 14 #Javascript
vue移动端路由切换实例分析
May 14 #Javascript
对node.js中render和send的用法详解
May 14 #Javascript
利用vscode调试编译后的js代码详解
May 14 #Javascript
vue的toast弹窗组件实例详解
May 14 #Javascript
You might like
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
PHP curl使用实例
2015/07/02 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
php使用yield对性能提升的测试实例分析
2019/09/19 PHP
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
jQuery异步验证用户名是否存在示例代码
2014/05/21 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
webpack构建react多页面应用详解
2017/09/15 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
[30:55]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第二场 11.18
2020/11/18 DOTA
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
Python操作列表之List.insert()方法的使用
2015/05/20 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
2019/02/21 Python
Python netmiko模块的使用
2020/02/14 Python
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
新郎婚宴答谢词
2014/01/19 职场文书
会计专业求职信范文
2014/03/16 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
领导班子整改方案
2014/10/25 职场文书
二婚主持词
2015/06/30 职场文书
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python