效果图

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

<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. 第九节:EF Core各种迁移指令(CodeFirst和DBFirst)

    一. CodeFirst模式指令 1.前提: 必须的程序集: Microsoft.EntityFrameworkCore.Tools Microsoft.EntityFrameworkCore.Des ...

  2. Mysql load data infile 导入数据出现:Data truncated for column

    [1]Mysql load data infile 导入数据出现:Data truncated for column .... 可能原因分析: (1)数据库表对应字段类型长度不够或修改为其他数据类型( ...

  3. vue要求更新3.0-》使用axios的时候出现错误

    要求更新 使用axios报错 - Running completion hooks...error: 'options' is defined but never used (no-unused-va ...

  4. WPF程序集资源

    WPF会将引用到的资源如图片.BAML文件等编译成二进制数据嵌入到已经编译了的程序集中. 下图是一个反编译后的程序目录结构: 那么,如何向项目中添加资源? 向项目中添加文件 设置生成操作(Build ...

  5. 04 .NET CORE 2.2 使用OCELOT -- identity认证授权

    修改接口项目 在上次的项目基础上,分别修改两个api项目的startup.cs public void ConfigureServices(IServiceCollection services) { ...

  6. C# vb .NET读取识别条形码线性条码ISBN

    ISBN是比较常见的条形码编码规则类型的一种.如何在C#,vb等.NET平台语言里实现快速准确读取该类型条形码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效.准确的条 ...

  7. 2019 淘友天下java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.淘友天下等公司offer,岗位是Java后端开发,因为发展原因最终选择去了淘友天下,入职一年时间了,也成为了面 ...

  8. 如何提升Web前端性能?

    什么是WEB前端呢?就是用户电脑的浏览器所做的一切事情.我们来看看用户访问网站,浏览器都做了哪些事情:输入网址 –> 解析域名 -> 请求页面 -> 解析页面并发送页面中的资源请求 ...

  9. $.fn.extend 与 $.extend的区别

    今天看到别人写的jquery 代码都是这样的 $.fn.extend 所以查询了一下,因为自己不是前端开发,看到这样写的,感觉很牛逼.从百度上搜到的感觉解释的还是挺好的,作为记录,方便以后查找. 搜索 ...

  10. 7.redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?

    作者:中华石杉 面试题 redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗? 面试官心理分析 在前几年, ...