vue使用Element组件时v-for循环里的表单项验证方法
element
A Vue.js 2.0 UI Toolkit for Web
项目地址:https://gitcode.com/gh_mirrors/eleme/element
免费下载资源
·
<template>
<div class="content-body">
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row :gutter="10">
<el-col :span="12" :offset="0">
<el-form-item label="套餐名称:" prop="activityName" id="activityName">
<el-input v-model="form.activityName"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="12">
<el-form-item label="状态:">
<el-radio v-model="form.status" label="1">上线</el-radio>
<el-radio v-model="form.status" label="0">下线</el-radio>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="2" style="width:120px;">
<div class="sub-title">梯度设置:</div>
</el-col>
<el-col :span="20">
<el-row :gutter="10" v-for="(item,index) in form.productGroup" :key="index">
<el-col :span="6">
<el-form-item label="商品数量:">
<el-input v-model="item.num" type="number" size="small" style="width:80px;"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="优惠价格:">
<el-input v-model="item.price" type="number" size="small" style="width:80px;"></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<i class="el-icon-remove-outline" @click="deleteLadder(index)"></i>
<i class="el-icon-circle-plus-outline" @click="addLadder" v-if="index==0"></i>
</el-col>
</el-row>
</el-col>
</el-row>
<el-form-item size="medium" class="div-submit">
<el-button @click="resetForm('form')">取消</el-button>
<el-button type="primary" @click="submitForm('form')">提交</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
/* eslint-disable */
export default {
data() {
return {
form: {
activityName: '',
status: '1',
productGroup: [{num:"",price:""}]
},
rules: {
activityName: [
{ required: true, message: '请输入套餐名称', trigger: 'blur' }
]
}
}
},
methods: {
deleteLadder(index)
{
if(this.form.productGroup.length>1){
this.form.productGroup.splice(index,1);
}
},
addLadder()
{
this.form.productGroup.push({num:"",price:""});
},
submitForm(formName)
{
console.log("activityName...",this.form.activityName);
this.$refs[formName].validate((valid,obj) => {
if (valid) {
this.submitFormAction();
} else {
this.$message.error("验证不通过");
}
});
},
submitFormAction()
{
this.$message.success("提交成功");
},
resetForm(formName)
{
this.$refs[formName].resetFields();
this.form.productGroup = [{num:"",price:""}];
}
}
}
</script>
<style>
.el-form-item {
margin-bottom: 20px;
}
</style>
首先是添加rules规则,这个和正常添加规则一样:
productGroupRules: {
productGroupNum: [{required: true, message: '请填写商品数量', trigger: 'blur'}],
productGroupPrice: [{required: true, message: '请填写优惠价格', trigger: 'blur'}]
}
然后给表单项添加验证,以商品数量为例:
<el-form-item label="商品数量:" :prop="'productGroup.'+index+'.num'" :rules="productGroupRules.productGroupNum">
<el-input v-model="item.num" type="number" size="small" style="width:80px;"></el-input>
</el-form-item>
注意这里:rules是每个表单项都要添加,有多个的话用productGroupRules.productGroupNum这样的形式区分,对应上面productGroupRules里的内容。
另外主要就是:prop了,注意正常验证表单项是prop,而这里是:prop。
:prop="‘productGroup.’+index+’.num’"是拼接的形式,前面是v-for绑定的数组,中间是数组索引index,最后是表单项绑定的v-model的名称,然后用点.把它们连接起来。这三项都必须保证正确,错一个都无法验证。
另外就是要注意,v-for绑定的数组也必须绑定在form对象里,注意上面的data里:
form: {
activityName: '',
status: '1',
productGroup: [{num:"",price:""}]
}
如果是:
form: {
activityName: '',
status: '1'
},
productGroup: [{num:"",price:""}]
是无法验证的,这一点也要注意。
好了,以上就是解决vue使用Element组件时v-for循环里的表单项验证的解决方案了,希望能帮助到遇到此问题的同学。
文章转载至:https://www.jb51.net/article/142750.htm 记录一下以便以后查阅
GitHub 加速计划 / eleme / element
54.06 K
14.63 K
下载
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:3 个月前 )
c345bb45
7 个月前
a07f3a59
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update table.md
* Update transition.md
* Update popover.md 7 个月前
更多推荐
已为社区贡献3条内容
所有评论(0)