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生成随机大小写字母的方法
Feb 20 Javascript
ie9 提示'console' 未定义问题的解决方法
Mar 20 Javascript
Javascript中innerHTML用法实例分析
Jan 12 Javascript
JavaScript获取URL汇总
Jun 08 Javascript
详解AngularJS的通信机制
Jun 18 Javascript
JavaScript实现多种排序算法
Feb 24 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
Sep 08 Javascript
js正则表达式校验指定字符串的方法
Jul 23 Javascript
Vue.js 利用v-for中的index值实现隔行变色
Aug 01 Javascript
如何为vue的项目添加单元测试
Dec 19 Javascript
Node.js API详解之 timer模块用法实例分析
May 07 Javascript
jQuery AJAX应用实例总结
May 19 jQuery
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 Class 文章
2007/04/04 PHP
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
php 无限极分类
2008/03/27 PHP
php笔记之:php数组相关函数的使用
2013/04/26 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
JavaScript 创建对象
2009/07/17 Javascript
浅谈javascript 面向对象编程
2009/10/28 Javascript
JavaScript 对象模型 执行模型
2010/10/15 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
jQuery实现每隔几条元素增加1条线的方法
2016/06/27 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
2016/12/26 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
Python3 模块、包调用&amp;路径详解
2017/10/25 Python
Python 实现微信防撤回功能
2019/04/29 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
意大利辅助药品、药物和补品在线销售:FarmaEurope
2020/04/29 全球购物
80后职场人的职业生涯规划
2014/03/08 职场文书
医德医风演讲稿
2014/05/20 职场文书
会计学专业求职信
2014/07/17 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书