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写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
Feb 09 Javascript
input+select(multiple) 实现下拉框输入值
May 21 Javascript
改变javascript函数内部this指针指向的三种方法
Apr 23 Javascript
ExtJs使用总结(非常详细)
Mar 22 Javascript
JavaScript中获取高度和宽度函数总结
Oct 08 Javascript
几种tab切换详解
Feb 03 Javascript
JavaScript闭包和回调详解
Aug 09 Javascript
javascript实现弹幕墙效果
Nov 28 Javascript
js实现数字滚动特效
Dec 16 Javascript
JQuery Ajax如何实现注册检测用户名
Sep 25 jQuery
微信小程序 WeUI扩展组件库的入门教程
Apr 21 Javascript
字节飞书面试promise.all实现示例
Jun 16 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
整合了前面的PHP数据库连接类~~做成一个分页类!
2006/11/25 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
Javascript 赋值机制详解
2014/11/23 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
2017/12/09 Javascript
vuex入门最详细整理
2020/03/04 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
Python实现扫描指定目录下的子目录及文件的方法
2014/07/16 Python
python数组复制拷贝的实现方法
2015/06/09 Python
python修改字典内key对应值的方法
2015/07/11 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
delegate与普通函数的区别
2014/01/22 面试题
95%的面试官都会问到的50道Java线程题,附答案
2012/08/03 面试题
党建工作汇报材料
2014/12/24 职场文书
起诉书格式范文
2015/05/20 职场文书
Python实现随机生成迷宫并自动寻路
2021/06/13 Python
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers