效果图

注意:如果是弹窗式的表单验证,记得每次退出退出重置一下表单。否则会每次进去都跳出验证影响体验

<template>
<div class="formValidator">
<div v-for="(item,index) in dataList" :key="index">
<el-form :model="dataList[index]" :rules="rules" ref="ruleForm" class="demo-ruleForm">
<el-form-item label="活动名称" prop="name">
<el-input v-model="dataList[index].name"></el-input>
</el-form-item>
<el-form-item label="活动形式" prop="desc">
<el-input v-model="dataList[index].desc"></el-input>
</el-form-item>
<el-form-item
label="手机号码"
v-for="(phoneItem,phoneIndex) in dataList[index].phoneNumbers"
:key="phoneIndex"
:rules="[{ required: true, validator: phoneNumberValidator, trigger: ['blur','change'] }]"
:prop="'phoneNumbers.' + phoneIndex + '.phoneNumber'"
>
<el-input
v-model.trim="phoneItem.phoneNumber"
onkeyup="this.value=this.value.replace(/\D/g,'')"
maxlength="11"
></el-input>
<el-link
v-if="item.phoneNumbers.length > 1"
type="primary"
:underline="false"
style="margin-left:10px"
@click.prevent="removePhoneNumber(index,phoneIndex)"
>删除</el-link>
</el-form-item>
<el-form-item>
<el-link type="primary" :underline="false" @click.prevent="addPhoneNumber(index)">增加手机号</el-link>
</el-form-item>
</el-form>
</div> <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
<el-button @click="resetForm('ruleForm')">重置</el-button>
</div>
</template> <script>
export default {
name: "formValidator",
data() {
let that = this
// 校验 input 的 函数 与rules里面 validator的参数
function nameValidator(rule, value, callback) {
if (value.trim() === "") {
callback(new Error("活动名称必填"));
} else {
callback();
}
}
function descValidator(rule, value, callback) {
if (value.trim() === "") {
callback(new Error("活动形式必填"));
} else {
callback();
}
}
function phoneNumberValidator(rule, value, callback) {
// 判断手机号码是否重复
let repeatPhoneNum = that.dataList.map(item => {
if(!!item.phoneNumbers){
return item.phoneNumbers.filter(itemFilter => itemFilter.phoneNumber === value).length > 1
}
})
// console.log(repeatPhoneNum)
if (value.trim() === "") {
callback(new Error("手机号码必填"));
} else if (value.length < 11) {
callback(new Error("手机号格式错误"));
} else if(repeatPhoneNum.includes(true)){
callback(new Error("新增号码重复"));
}else {
callback();
}
}
return {
// 手机号验证 手机号验证是v-for循环 所以应用的是官网案例 单独v-for 的校验需要注意 :prop里的值
phoneNumberValidator: phoneNumberValidator,
//数据列表
dataList: [
{
name: "",
desc: "",
phoneNumbers: [
{
phoneNumber: ""
}
]
}
],
// 用来校验表单的rules
rules: {
name: [
{
validator: nameValidator,
required: true,
trigger: ["blur", "change"]
}
],
desc: [
{
validator: descValidator,
required: true,
trigger: ["blur", "change"]
}
]
}
};
},
components: {},
created() {},
mounted() {},
methods: {
  //点击保存按钮进行所有表单验证
submitForm(ref) {
// 获取到表单
let el = this.$refs.ruleForm;
let validate // 用来存放是否表单验证通过,true 通过 , false 不通过
if (el.length > 0) {
el.forEach((item, index) => {
item.validate(valid => {
validate = valid
});
});
}
   //在里面可以打印一下 el 里面的mode 代表着form 表单中的所填写的字段及内容
console.log(el, validate);
},
// 添加手机号
addPhoneNumber(index) {
this.dataList[index].phoneNumbers.push({
phoneNumber: ""
});
},
// 删除手机号
removePhoneNumber(index1,index2){
this.dataList[index1].phoneNumbers.splice(index2,1)
}
}
};
</script>

vue+element 表单验证的更多相关文章

  1. vue element 表单验证不通过,滚动到固对应位置

    我们在使用elementIUI实现表单验证,内容比较多的时候,提示内容会被遮挡,这时候用户不清楚什么情况,还会连续点击提交按钮.这个时候需求来啦:我们需要在表单验证不通过的时候,页面滚动到对应的位置. ...

  2. Element表单验证(1)

    Element表单验证(1) 首先要掌握Element官方那几个表单验证的例子,然后才看下面的教程. Element主要使用了async-validator这个库作为表单验证 async-valida ...

  3. Element表单验证(2)

    Element表单验证(2) 上篇讲的是async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇. 上篇讲到async-validator由3大部分组成 ...

  4. async-validator:Element表单验证

    转载文章:Element表单验证(2)   Element表单验证(2) 上篇讲的是async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇. 上篇讲到a ...

  5. vue+element 表单封成组件(1)

    作为一名刚接触vue不到一个月的菜鸟,思想还没有从操作DOM转变为数据驱动,看vue的代码处处别扭.组里为了让我熟悉vue交给了我一个将element 表单封装成组件的练手任务.由于开发过程中遇到的表 ...

  6. 使用vue做表单验证

    <template> <Form ref="formInline" :model="formInline" :rules="rule ...

  7. 解决“element表单验证输入的数字检测出来是string”的问题

    form表单: 校验规则: 注意:一.数字类型的验证需要在 v-model 处加上 .number 的修饰符,这是 Vue 自身提供的用于将绑定值转化为 number 类型的修饰符.二.校验中是否添加 ...

  8. Element表单验证规则

    一.简单的逻辑验证使用方法: 方法步骤: 1.在html中给el-form增加 :rules="rules" 2.html中在el-form-item 中增加属性 prop=&qu ...

  9. vue+element表单校验功能

    要实现这个功能其实并不难,element组件直接用就可以, 但是我在使用过程中碰到了几个坑,就记录下来,分享给大家,避免落坑,话不多说,直接上过程...... 表单校验功能:   实现这个功能,总共分 ...

随机推荐

  1. skywalking集群部署

    1.需求:有两台服务器分别装了app,对这些app进行性能监控 三台服务器:10.10.20.198作为服务端展示性能数据,10.10.20.64客户端,装btam系统,10.10.20.63客户端装 ...

  2. protobuf 中import 的使用

    目录结构如下: test.proto的文件内容如下: syntax="proto2"; package com.eagle.mohrss; option java_outer_cl ...

  3. 阿里云Centos7用putty ssh链接掉线

    解决方法:修改云服务器 ssh 配置文件(修改前一定要先备份) (1)打开配置文件: vim /etc/ssh/sshd_config 1 (2)找到下面两行: ClientAliveInterval ...

  4. ElasticSearch 查询索引

    GET iis_qr_2019-07/_search #查询iis_qr_2019-07索引下的所有日志 GET iis_qr_2019-07/_search?_source=c-ip,time #只 ...

  5. electron项目中使用js web worker时,new worker(path)路径问题

    如题,在new worker时需要传入js文件路径,可是在electron环境中使用出现问.同目录下,recorder.jsworker.js recorder.js中调用 var path = '. ...

  6. vue-router 在新窗口打开页面的功能

    项目中,需要点击链接后再新窗口打开页面,大家知道vue是单页面应用开发框架,那么也不是不可以实现这个功能 很简单,详情看下面 1.<router-link>标签实现新窗口打开 <ro ...

  7. 精益车间管理如何实现?让APS排程系统来帮忙

    精益制造是企业全面的文化改变,它的主要目标是消灭任何形式的浪费.最明显的例子是在生产区域堆积的物料.在制品.等待客户来买的成品.它还可能包括员工不必的移动和不增值的许多流程,目标是在最小的库存,最短的 ...

  8. OEL7.6源码安装MYSQL5.7

    首先官网下载安装包https://dev.mysql.com/downloads/mysql/5.7.html#downloads 然后上传解压至/usr/local目录 [root@localhos ...

  9. 常用SQL语句分享

    前言:  日常工作或学习过程中,我们可能会经常用到某些SQL,建议大家多多整理记录下这些常用的SQL,这样后续用到会方便很多.笔者在工作及学习过程中也整理了下个人常用的SQL,现在分享给你!可能有些S ...

  10. 【Thinkphp】引入第三方类库常见问题

    TP3.2在添加第三方sdk的时候,文件放在ThinkPHP/Library/Org文件夹下可独立创建文件夹(官方文档有其他思路)需对文件做以下修改. 1.第一应该修改文件的名称(下载的sdk一般是 ...