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 相关文章推荐
IE中图片的onload事件无效问题和解决方法
Jun 06 Javascript
JS获取单击按钮单元格所在行的信息
Jun 17 Javascript
浅谈jquery中delegate()与live()
Jun 22 Javascript
Bootstrap每天必学之导航组件
Apr 25 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
Oct 27 Javascript
详解JavaScript对象的深浅复制
Mar 30 Javascript
JS面试题大坑之隐式类型转换实例代码
Oct 14 Javascript
element-ui的回调函数Events的用法详解
Oct 16 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
May 10 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
May 10 Javascript
详解vue路由
Aug 05 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
Sep 21 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
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
利用php输出不同的心形图案
2016/04/22 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
Redis构建分布式锁
2017/03/28 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
2010/04/15 Javascript
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
强大的JavaScript响应式图表Chartist.js的使用
2017/09/13 Javascript
JS实现继承的几种常用方式示例
2019/06/22 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
Python下的subprocess模块的入门指引
2015/04/16 Python
简单介绍Python中的try和finally和with方法
2015/05/05 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
ORACLE第二个十问
2013/12/14 面试题
狼和鹿教学反思
2014/02/05 职场文书
中学教师教育感言
2014/02/21 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
会计求职简历自我评价
2015/03/10 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js