Vue循环组件加validate多表单验证的实例


Posted in Javascript onSeptember 18, 2018

*父父组件(helloWorld.vue):

<template>
 <div class="hello-world">
  <el-button type="text" @click="saveAll" class="button">SAVE</el-button>
  <promise-father ref="promiseFather"></promise-father>
 </div>
</template>
<script>
import PromiseFather from './promiseFather'
export default {
 name: `HelloWorld`,
 components: { PromiseFather },
 data () {
  return {
   promiseFather: ''
  }
 },
 methods: {
  saveAll () {
   this.$refs.promiseFather.validate(valid => {
    if (valid) {
     this.$message.success('(^o^)~ 验证成功!')
    } else {
     this.$message.error('-_- 验证失败!')
    }
   })
  }
 }
}
</script>
<style scoped>
 .button {
  position: absolute;
  top: 60px;
  left: 660px;
 }
</style>

*父组件(promiseFather.vue):

<template>
 <div class="promise-father">
  <h2>{{ title }}
   <el-button type="text" @click="add" class="button">添加</el-button>
  </h2>
  <div v-for="(item, index) in validateSet" :key="item.id">
   <promise-child ref="promiseChild" :formData="item" :index="index" @remove="remove"></promise-child>
  </div>
 </div>
</template>
<script>
import uuid from 'uuid'
import PromiseChild from '@/components/promiseChild'
export default {
 name: `PromiseFather`,
 components: {
  PromiseChild
 },
 data () {
  return {
   title: 'WHY! mtw',
   promiseChild: '',
   validateSet: []
  }
 },
 methods: {
  validate (callback) {
   if (this.validateSet && this.validateSet.length > 0) {
    const promiseList = []
    this.$refs.promiseChild.forEach((item, index) => {
     promiseList.push(item.validate())
    })
    Promise.all(promiseList).then(() => {
     callback(true)
    }).catch(() => {
     callback(false)
    })
   } else {
    callback(true)
   }
  },
  add () {
   this.validateSet.push({
    name: '',
    phone: '',
    id: uuid.v4()
   })
  },
  remove (num) {
   this.validateSet.splice(num, 1)
  }
 }
}
</script>
<style scoped>
 .index {
  margin-left: -546px;
 }
 .button {
  margin-left: 60px;
 }
</style>

*子组件(promiseChild.vue):

<template>
 <div class="promise-child">
  <el-form :model="form" ref="form" :rules="formRules" :inline="true" label-position="right">
   <el-form-item :label="`${index + 1}`+'、'">
   </el-form-item>
   <el-form-item label="姓名" prop="name">
    <el-input v-model="form.name" size="small"></el-input>
   </el-form-item>
   <el-form-item label="手机" prop="phone">
    <el-input v-model="form.phone" size="small"></el-input>
   </el-form-item>
   <el-form-item>
    <el-button @click="remove" size="small">删除</el-button>
   </el-form-item>
  </el-form>
 </div>
</template>
<script>
import uuid from 'uuid'
export default {
 name: `PromiseChild`,
 props: {
  formData: Object,
  index: Number
 },
 data () {
  return {
   form: {
    name: '',
    phone: '',
    id: uuid.v4()
   },
   formRules: {
    name: [
     { required: true, message: '请输入姓名!', trigger: 'blur' }
    ],
    phone: [
     { required: true, message: '请输入手机号码', trigger: 'blur' },
     { max: 11, message: '长度不能超过11', trigger: 'blur' },
     {
      validator: (rules, value, callback) => {
       if (value) {
        let regPhone = /^(13[0-9]|15[012356789]|18[0123456789]|147|145|17[0-9])\d{8}$/
        if (regPhone.test(value)) {
         callback()
        } else {
         callback('请输入正确的手机号码!')
        }
       } else {
        callback('请输入手机号码!')
       }
      }
     }
    ]
   }
  }
 },
 methods: {
  validate () {
   return new Promise((resolve, reject) => {
    this.$refs.form.validate(valid => {
     if (valid) {
      resolve()
     } else {
      reject()
     }
    })
   })
  },
  remove () {
   this.$emit('remove', this.index)
  }
 }
}
</script>

以上这篇Vue循环组件加validate多表单验证的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript设计模式之外观模式实例
Oct 10 Javascript
JavaScript中的fontsize()方法使用详解
Jun 08 Javascript
jQuery使用经验小技巧(推荐)
May 31 Javascript
JavaScript实现相册弹窗功能(zepto.js)
Jun 21 Javascript
js 上传文件预览的简单实例
Aug 16 Javascript
JavaScript 对象详细整理总结
Sep 29 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
Jan 20 Javascript
wx-charts 微信小程序图表插件的具体使用
Aug 18 Javascript
layui 解决富文本框form表单提交为空的问题
Oct 26 Javascript
vue Tab切换以及缓存页面处理的几种方式
Nov 05 Javascript
vue-socket.io接收不到数据问题的解决方法
May 13 Javascript
原生js拖拽功能制作滑动条实例代码
Feb 05 Javascript
vue2.0 + ele的循环表单及验证字段方法
Sep 18 #Javascript
JavaScript指定断点操作实例教程
Sep 18 #Javascript
对VUE中的对象添加属性
Sep 18 #Javascript
微信小程序适配iphoneX的实现方法
Sep 18 #Javascript
小程序兼容安卓和IOS数据处理问题及坑
Sep 18 #Javascript
解决vue attr取不到属性值的问题
Sep 18 #Javascript
vue动画打包后失效问题的解决方法
Sep 18 #Javascript
You might like
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
php getsiteurl()函数
2009/09/05 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
js实现录音上传功能
2019/11/22 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
Django实现学生管理系统
2019/02/26 Python
Python Celery多队列配置代码实例
2019/11/22 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
法国在线宠物店:zooplus.fr
2018/02/23 全球购物
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
《商鞅南门立木》教学反思
2014/02/16 职场文书
工作睡觉检讨书
2014/02/25 职场文书
党员创先争优承诺书
2014/03/26 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
蜗居观后感
2015/06/11 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js