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 相关文章推荐
JS 去前后空格大全(IE9亲测)
Jul 15 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
May 14 Javascript
JS小游戏之仙剑翻牌源码详解
Sep 25 Javascript
初识Javascript小结
Jul 16 Javascript
jquery实现先淡出再折叠收起的动画效果
Aug 07 Javascript
js实现点击每个li节点,都弹出其文本值及修改
Dec 15 Javascript
Javascript for in的缺陷总结
Feb 03 Javascript
Webpack中css-loader和less-loader的使用教程
Apr 27 Javascript
JQuery通过后台获取数据遍历到前台的方法
Aug 13 jQuery
基于node简单实现RSA加解密的方法步骤
Mar 21 Javascript
vue Tab切换以及缓存页面处理的几种方式
Nov 05 Javascript
vue Element-ui表格实现树形结构表格
Jun 07 Vue.js
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
c#中的实现php中的preg_replace
2009/12/21 PHP
百度站点地图(百度sitemap)生成方法分享
2014/01/09 PHP
php向js函数传参的几种方法
2014/08/10 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
jQuery+AJAX实现无刷新下拉加载更多
2015/07/03 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
python用requests实现http请求代码实例
2019/10/31 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
python要安装在哪个盘
2020/06/15 Python
CSS3教程(2):网页边框半径和网页圆角
2009/04/02 HTML / CSS
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
美国环保妈妈、儿童和婴儿用品购物网站:The Tot
2019/11/24 全球购物
党员入党表决心的话
2014/03/11 职场文书
2014年高考决心书
2014/03/11 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
病假条格式范文
2015/08/17 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android