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 相关文章推荐
js计数器代码
Nov 04 Javascript
jquery选择器的选择使用及性能介绍
Jan 16 Javascript
jquery如何根据值设置默认的选中项
Mar 17 Javascript
js鼠标点击图片切换效果实现代码
Nov 19 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
Dec 14 Javascript
JS实现中国公民身份证号码有效性验证
Feb 20 Javascript
easyui下拉框动态级联加载的示例代码
Nov 29 Javascript
koa socket即时通讯的示例代码
Sep 07 Javascript
js取0-9随机取4个数不重复的数字代码实例
Mar 27 Javascript
深入了解JavaScript 私有化
May 30 Javascript
解决layui动态加载复选框无法选中的问题
Sep 20 Javascript
JS实现九宫格拼图游戏
Jun 28 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 a simple smtp class
2007/11/26 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
2014/03/18 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
express的中间件basicAuth详解
2014/12/04 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
详解vue-router 初始化时做了什么
2018/06/11 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
简单说明Python中的装饰器的用法
2015/04/24 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
对python:print打印时加u的含义详解
2018/12/15 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
室内设计专业个人的自我评价
2013/12/18 职场文书
关于人生的感言
2014/01/17 职场文书
先进事迹报告会主持词
2014/04/02 职场文书
连带责任保证书
2014/04/29 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
2015年入党决心书
2015/02/05 职场文书
董事长年会致辞
2015/07/29 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
同学会演讲稿
2019/04/02 职场文书
实用求职信模板范文
2019/05/13 职场文书