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组件直接用就可以, 但是我在使用过程中碰到了几个坑,就记录下来,分享给大家,避免落坑,话不多说,直接上过程...... 表单校验功能: 实现这个功能,总共分 ...
随机推荐
- mac下安装和运行redis
第一部分:安装 第一步:直接从官网下载**.tar.gz这个包.并用tar -zxvf **.tar.gz -C 指定目录 示例命令: tar -zxvf redis-5.0.5.tar.gz ...
- spring-session(一)揭秘续篇
上一篇文章中介绍了Spring-Session的核心原理,Filter,Session,Repository等等,传送门:spring-session(一)揭秘. 这篇继上一篇的原理逐渐深入Sprin ...
- jQuery浮窗图片到页面中间的代码
jQuery浮窗图片到页面中间的代码 <!doctype html> <html> <head> <meta charset="utf-8" ...
- 我遇到的WPF的坑
转自 林德熙Blog 本文:我遇到的WPF的坑 目录 单例应用在多实例用户无法使用 标记方法被使用 当鼠标滑过一个被禁用的元素时,让ToolTip 显示 获取设备屏幕数量 获取当前域用户 绑定资源文件 ...
- IDEA 部署spring Cloud
Spring cloud Eureka Eureka Server,注册中心 Eureka Client,所有要进行注册的微服务通过Eureka Client 连接到 Eureka Server ,完 ...
- IOS—— strong weak retain assign 学习
转自:http://wenzongliang.iteye.com/blog/1746604 简单讲strong等同retain weak比assign多了一个功能,当对象消失后自动把指针变成nil,好 ...
- ThinkPHP3.2.3:使用模块映射隐藏后台真实访问地址(如:替换url里的admin字眼)
例如:项目应用目录/Application下模块如下,默认后台模块为Admin 现在需要修改后台模块的访问地址,以防被别有用心的人很容易就猜到,然后各种乱搞... (在公共配置文件/Applicati ...
- MySQL Execution Plan--使用Query Rewrite
安装Query Rewrite Plugin 在MySQL的安装目录的share文件夹下,有两个文件用来安装和卸载Query Rewrite Plugin: install_rewriter.sql: ...
- MySQL权限管理、配置文件(三)
一.MySQL权限管理 GRANT 权限 ON 授权范围 TO '用户名'@'允许的ip(所有%)' IDENTIFIED BY '用户密码'; 权限:参加下表,一般常用的是CREATE.DELETE ...
- 谷歌学术出现We're sorry解决办法
出现这个的原因应该是同ip段的或者就是这个ip曾经是个google的黑名单ip,因为恶意爬取谷歌学术了.解决办法就是申请Hurricane Electric Free IPv6 Tunnel Brok ...