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和firefox中img对象区别的困惑
Dec 27 Javascript
在线编辑器中换行与内容自动提取
Apr 24 Javascript
jquery根据锚点offset值实现动画切换
Sep 11 Javascript
js获取本机操作系统类型的两种方法
Dec 19 Javascript
Sea.JS知识总结
May 05 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
Jun 03 Javascript
真正好用的js验证上传文件大小的简单方法
Oct 27 Javascript
angular.js 路由及页面传参示例
Feb 24 Javascript
微信小程序入口场景的问题集合与相关解决方法
Jun 26 Javascript
JQuery发送ajax请求时中文乱码问题解决
Nov 14 jQuery
JS Thunk 函数的含义和用法实例总结
Apr 08 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
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
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
Jquery练习之表单验证实现代码
2010/12/14 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
JavaScript根据数据生成百分比图和柱状图的实例代码
2013/07/14 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
jquery与prototype框架的详细对比
2013/11/21 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
js如何编写简单的ajax方法库
2017/08/02 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
Python 代码性能优化技巧分享
2012/08/07 Python
python里大整数相乘相关技巧指南
2014/09/12 Python
简单解析Django框架中的表单验证
2015/07/17 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
NumPy中的维度Axis详解
2019/11/26 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
python 6行代码制作月历生成器
2020/09/18 Python
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
以太网Ethernet IEEE802.3
2013/08/05 面试题
顶碗少年教学反思
2014/02/21 职场文书
蓬莱阁导游词
2015/02/04 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python