表单验证[2019.12.25]
- 父组件部分代码(例子)
<template>
...
<el-form :model="ruleForm" :rules="formRules" ref="ruleForm">
<el-form-item prop="name" label="昵称">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item prop="email" label="邮箱" >
<el-input v-model="ruleForm.email"></el-input>
</el-form-item>
<phone-set
:phone="ruleForm.phone"
@addPhone="addPhone"
@deletePhone="deletePhone"
></phone-set>
</el-form>
...
</template>
<script>
export default {
import PhoneSet from "./phone";
data(){
let validateName = (rule,value,callback)=>{
let reg = /[^a-zA-Z0-9_.\-\u4e00-\u9fa5]/;
if(value){
if(value.length > 50){
callback(new Error('最大长度为50个字符'));
}else if (reg.exec(value)) {
callback(new Error('包含非法字符(应由数字、字母、中文、_.-组成)'));
} else {
callback();
}
}
}
return{
ruleForm:{
email: '',
name: '',
phone: [{tell:''}]
}
formRules:{
email:[{
required: true,
message: '请输入邮箱地址',
trigger: 'blur'
},{
type: 'email',
message: '请输入正确的邮箱地址',
trigger: ['blur', 'change']
}
],
name:[{
require: true,
message: '请输入昵称',
trigger: 'blur'
},{
pattern:/[^a-zA-Z0-9_.\-\u4e00-\u9fa5]/,
message: '包含非法字符(应由数字、字母、中文、_.-组成)',
trigger: ['blur', 'change']
},{
max:20,
message: '最大长度为20个字符',
trigger: 'change'
},{
validator:validateName,
trigger: ['blur', 'change']
}
]
}
}
},
methods:{
deletePhone(index) {
this.ruleForm.phone.splice(index, 1)
},
addPhone() {
this.ruleForm.phone.push( { tell: "" } )
},
}
}
</script>
- 子组件部分代码[phone.vue]
<template>
...
<el-form-item :label="电话" prop="phone" >
<div v-for="(phoneItem,index) in phone" :key="index" >
<el-form-item :prop="`phone.${index}.tell`" :rules="formRules.tell" >
<el-input :placeholder="请输入电话号码" v-model="phoneItem.tell" ></el-input>
</el-form-item>
<div>
<i class="el-icon-plus" @click="addPhone()"></i>
<i class="el-icon-close" v-if="index!=0" @click="deletePhone(index)"></i>
</div>
</div>
</el-form-item>
...
</template>
<script>
export default{
props:{
phone:{
type:Array,
require: true
}
}
data(){
return{
formRules:{
phone:[{required: true}],
tell: [{required: true, message: "请输入电话号码", trigger: 'blur'}]
}
}
},
methods:{
addContions() {
this.$emit('addPhone')
},
deleteContions(index) {
this.$emit('deletePhone', index)
}
}
}
</script>
- 【参考链接:async-validator】