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 相关文章推荐
解决jquery .ajax 在IE下卡死问题的解决方法
Oct 26 Javascript
jQuery之ajax技术的详细介绍
Jun 19 Javascript
javascript实现删除前弹出确认框
Jun 04 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
Aug 25 Javascript
jQuery实现选项联动轮播效果【附实例】
Apr 19 Javascript
浅谈js中的延迟执行和定时执行
May 31 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
Dec 02 Javascript
Vue路由history模式解决404问题的几种方法
Sep 29 Javascript
vue使用i18n实现国际化的方法详解
Sep 05 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
Dec 06 Javascript
element中的$confirm的使用
Apr 26 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
Jun 11 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使用pack处理二进制文件的方法
2014/07/03 PHP
理解 JavaScript 预解析
2009/10/25 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
AngularJS入门教程之AngularJS 模板
2016/08/18 Javascript
移动端界面的适配
2017/01/11 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
Python脚本实现网卡流量监控
2015/02/14 Python
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
升职自荐信范文
2013/10/05 职场文书
铁路个人事迹材料
2014/01/30 职场文书
运动会开幕式解说词
2014/02/05 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
我的长征观后感
2015/06/09 职场文书
关于做家务的心得体会
2016/01/23 职场文书
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python