vue+element 表单验证
效果图
注意:如果是弹窗式的表单验证,记得每次退出退出重置一下表单。否则会每次进去都跳出验证影响体验
<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 表单验证的更多相关文章
- vue element 表单验证不通过,滚动到固对应位置
我们在使用elementIUI实现表单验证,内容比较多的时候,提示内容会被遮挡,这时候用户不清楚什么情况,还会连续点击提交按钮.这个时候需求来啦:我们需要在表单验证不通过的时候,页面滚动到对应的位置. ...
- Element表单验证(1)
Element表单验证(1) 首先要掌握Element官方那几个表单验证的例子,然后才看下面的教程. Element主要使用了async-validator这个库作为表单验证 async-valida ...
- Element表单验证(2)
Element表单验证(2) 上篇讲的是async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇. 上篇讲到async-validator由3大部分组成 ...
- async-validator:Element表单验证
转载文章:Element表单验证(2) Element表单验证(2) 上篇讲的是async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇. 上篇讲到a ...
- vue+element 表单封成组件(1)
作为一名刚接触vue不到一个月的菜鸟,思想还没有从操作DOM转变为数据驱动,看vue的代码处处别扭.组里为了让我熟悉vue交给了我一个将element 表单封装成组件的练手任务.由于开发过程中遇到的表 ...
- 使用vue做表单验证
<template> <Form ref="formInline" :model="formInline" :rules="rule ...
- 解决“element表单验证输入的数字检测出来是string”的问题
form表单: 校验规则: 注意:一.数字类型的验证需要在 v-model 处加上 .number 的修饰符,这是 Vue 自身提供的用于将绑定值转化为 number 类型的修饰符.二.校验中是否添加 ...
- Element表单验证规则
一.简单的逻辑验证使用方法: 方法步骤: 1.在html中给el-form增加 :rules="rules" 2.html中在el-form-item 中增加属性 prop=&qu ...
- vue+element表单校验功能
要实现这个功能其实并不难,element组件直接用就可以, 但是我在使用过程中碰到了几个坑,就记录下来,分享给大家,避免落坑,话不多说,直接上过程...... 表单校验功能: 实现这个功能,总共分 ...
随机推荐
- StuQ技能图谱
- 发送邮件报错javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed
关于使用javaMail发送邮件报错:javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multip ...
- centos7.x下环境搭建(二)—nginx安装
上篇文章是对mysql的安装,接着上篇文章,这篇文章安装nginx服务 添加yum源 默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址.因此可以如下执行命令添 ...
- secure-file-priv特性
转载自:https://segmentfault.com/a/1190000009333563 当出现:1290 - The MySQL server is running with the --se ...
- fancybit个人简介
程序员一枚 熟悉C C++ C# js lua等多种常见开发语言 熟悉Unity游戏开发 node.js pomelo和C# scut 网游后端框架 做过.net和php网站后端 二次元文化爱好者 有 ...
- XmlExtensions帮助类
public static class XmlExtensions { static Lazy<XmlWriterSettings> _settings = new Lazy<Xml ...
- C# vb .NET读取识别条形码线性条码UPC-A
UPC-A是比较常见的条形码编码规则类型的一种.如何在C#,vb等.NET平台语言里实现快速准确读取该类型条形码呢?答案是使用SharpBarcode! SharpBarcode是C#快速高效.准确的 ...
- asp.net MVC中使用EasyUI Treegrid 树形网格
引入CSS和JS <link href="~/Content/plugins/jquery-easyui-1.7.0/themes/default/easyui.css" r ...
- git分支的衍合
一般我们使用衍合的目的,是想要得到一个能在远程分支上干净应用的补丁 — 比如某些项目你不是维护者,但想帮点忙的话,最好用衍合:先在自己的一个分支里进行开发,当准备向主项目提交补丁的时候,根据最新的 o ...
- 周黑鸭借力MES,推进智能生产
1.项目背景介绍 中国食品企业在经过了一些年的行业整体快速增长后,国家对食品行业的管理提出了更加严格的要求,控制更严,准入门槛提高,企业数量成下降趋势. 大中型食品企业已经需要走出国门,走向国际市场, ...