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 相关文章推荐
Z-Blog中用到的js代码
Mar 15 Javascript
实现局部遮罩与关闭原理及代码
Feb 04 Javascript
JQuery+Ajax无刷新分页的实例代码
Feb 08 Javascript
js如何调用qq互联api实现第三方登录
Mar 28 Javascript
从零学jquery之如何使用回调函数
May 16 Javascript
javascript中eval函数用法分析
Apr 25 Javascript
jQuery中extend函数详解
Jul 13 Javascript
javascript中的altKey 和 Event属性大全
Nov 06 Javascript
Three.js基础学习教程
Nov 16 Javascript
js 实现复选框只能选择一项的示例代码
Jan 23 Javascript
jQuery+PHP实现上传裁剪图片
Jun 29 jQuery
JS/CSS实现字符串单词首字母大写功能
Sep 03 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连接mysql是否成功的代码分享
2014/01/24 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
2016/01/09 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
Vue的状态管理vuex使用方法详解
2020/02/05 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
Python发送form-data请求及拼接form-data内容的方法
2016/03/05 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
python八皇后问题的解决方法
2018/09/27 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
python小程序实现刷票功能详解
2019/07/17 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
Sentry错误日志监控使用方法解析
2020/11/12 Python
工业学校毕业生自荐书
2014/01/03 职场文书
护理专业毕业生自我鉴定总结
2014/03/24 职场文书
小学评语大全
2014/04/22 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
居安思危观后感
2015/06/11 职场文书
廉洁自律证明
2015/06/24 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang