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组件直接用就可以, 但是我在使用过程中碰到了几个坑,就记录下来,分享给大家,避免落坑,话不多说,直接上过程...... 表单校验功能: 实现这个功能,总共分 ...
随机推荐
- skywalking集群部署
1.需求:有两台服务器分别装了app,对这些app进行性能监控 三台服务器:10.10.20.198作为服务端展示性能数据,10.10.20.64客户端,装btam系统,10.10.20.63客户端装 ...
- protobuf 中import 的使用
目录结构如下: test.proto的文件内容如下: syntax="proto2"; package com.eagle.mohrss; option java_outer_cl ...
- 阿里云Centos7用putty ssh链接掉线
解决方法:修改云服务器 ssh 配置文件(修改前一定要先备份) (1)打开配置文件: vim /etc/ssh/sshd_config 1 (2)找到下面两行: ClientAliveInterval ...
- ElasticSearch 查询索引
GET iis_qr_2019-07/_search #查询iis_qr_2019-07索引下的所有日志 GET iis_qr_2019-07/_search?_source=c-ip,time #只 ...
- electron项目中使用js web worker时,new worker(path)路径问题
如题,在new worker时需要传入js文件路径,可是在electron环境中使用出现问.同目录下,recorder.jsworker.js recorder.js中调用 var path = '. ...
- vue-router 在新窗口打开页面的功能
项目中,需要点击链接后再新窗口打开页面,大家知道vue是单页面应用开发框架,那么也不是不可以实现这个功能 很简单,详情看下面 1.<router-link>标签实现新窗口打开 <ro ...
- 精益车间管理如何实现?让APS排程系统来帮忙
精益制造是企业全面的文化改变,它的主要目标是消灭任何形式的浪费.最明显的例子是在生产区域堆积的物料.在制品.等待客户来买的成品.它还可能包括员工不必的移动和不增值的许多流程,目标是在最小的库存,最短的 ...
- OEL7.6源码安装MYSQL5.7
首先官网下载安装包https://dev.mysql.com/downloads/mysql/5.7.html#downloads 然后上传解压至/usr/local目录 [root@localhos ...
- 常用SQL语句分享
前言: 日常工作或学习过程中,我们可能会经常用到某些SQL,建议大家多多整理记录下这些常用的SQL,这样后续用到会方便很多.笔者在工作及学习过程中也整理了下个人常用的SQL,现在分享给你!可能有些S ...
- 【Thinkphp】引入第三方类库常见问题
TP3.2在添加第三方sdk的时候,文件放在ThinkPHP/Library/Org文件夹下可独立创建文件夹(官方文档有其他思路)需对文件做以下修改. 1.第一应该修改文件的名称(下载的sdk一般是 ...