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 相关文章推荐
Google Suggest ;-) 基于js的动态下拉菜单
Oct 11 Javascript
使用TextRange获取输入框中光标的位
Oct 14 Javascript
How to Auto Include a Javascript File
Feb 02 Javascript
javascript实现划词标记+划词搜索功能
Mar 06 Javascript
jquery多选项卡效果实例代码(附效果图)
Mar 23 Javascript
Jquery同辈元素选中/未选中效果的实例代码
Aug 01 Javascript
Ajax提交与传统表单提交的区别说明
Feb 07 Javascript
javascript 中的 delete及delete运算符
Nov 15 Javascript
基于JS实现类似支付宝支付密码输入框
Sep 02 Javascript
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
vue移动端html5页面根据屏幕适配的四种解决方法
Oct 19 Javascript
vue项目中监听手机物理返回键的实现
Jan 18 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实现向关联数组指定的Key之前插入元素的方法
2017/06/06 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
三种取消选中单选框radio的方法
2014/09/09 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
浅谈Python 中整型对象的存储问题
2016/05/16 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
python+logging+yaml实现日志分割
2019/07/22 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
Python读取csv文件实例解析
2019/12/30 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
2020/12/13 Python
如何查看python关键字
2021/01/17 Python
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
保安自我鉴定范文
2013/12/08 职场文书
中专生自我鉴定
2013/12/17 职场文书
大学生个人先进事迹材料范文
2014/05/03 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
2014年校长工作总结
2014/12/11 职场文书
机关保密工作承诺书
2015/05/04 职场文书
工作简报怎么写
2015/07/21 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
python中%格式表达式实例用法
2021/06/18 Python
React列表栏及购物车组件使用详解
2021/06/28 Javascript