我们知道正常写出来的input输入框如何校验,那循环出来的输入框应该怎么校验咧,这里就教大家如何的去校验通过循环出来的输入框。
首先先看单个的input如何做校验
<template>
<div>
<el-form ref="ruleFormRef" :model="ruleForm" label-width="120px" class="demo-ruleForm" status-icon>
<el-form-item label="Activity name" prop="ruleForm[1].value" //prop的值要和model绑定的属性一直
:rules = rules[1] //绑定一个校验>
<el-input v-model=" ruleForm.ruleForm[1].value " /> //通过model双向绑定数据
</el-form-item>
</el-form>
</div>
</template>
<script lang="ts" setup>
import router from '../router';
import { ref, reactive } from 'vue';
// setInterval(() => {
// if (window.console && window.console.log) {
// alert
// }
// }, 1000)
const ruleForm = reactive({
ruleForm: [
{ value: "123" }, { value: "1223" }, { value: "" } //inout绑定的数据
]
})
const rules = reactive([
{ required: true, message: '该输入项为必填项!1', trigger: 'blur' }, //校验
{ required: true, message: '该输入项为必填项!2', trigger: 'blur' },
{ required: true, message: '该输入项为必填项!3', trigger: 'blur' },
]
)
我们在通过循环ruleform,生成多个input输入框,代码如下
现在这种情况下,因为prop无法精准的定位到底应该绑定哪个input,所以就会出现,prop无法校验input的情况下,这时候只能是通过给prop传入相对应的下标,通过下标来区分,一个prop对比一个model,代码如下
这里要注意下,人工prop的参数传入变量时,记得在前面加上:号,变量才会生效,不管是不是用模板字符串的写法。
然后我们可以根据下标为每一个input单独设置校验规则,
我们给rules传入一个参数,参数接受下标,通过下标来对每一个循环出来的input设置校验规则
<template>
<div>
<el-form ref="ruleFormRef" :model="ruleForm" label-width="120px" class="demo-ruleForm" status-icon>
<el-form-item label="Activity name" prop="`ruleForm.${index}.value`" v-for="(item,index) in ruleForm.ruleForm" :key="index"
:rules = rules[index]> //属性值rules是一个数组,数组通过下标来获取具体是哪个数据,通过传入input循环的下标来确定校验数组里具体哪一条校验规则
<el-input v-model="item.value"/>
</el-form-item>
</el-form>
</div>
</template>
<script lang="ts" setup>
import router from '../router';
import { ref, reactive } from 'vue';
// setInterval(() => {
// if (window.console && window.console.log) {
// alert
// }
// }, 1000)
const ruleForm = reactive({
ruleForm: [
{ value: "123" }, { value: "1223" }, { value: "" }
]
})
const rules = reactive([ //校验规则数组,通过下标来确定具体绑定校验的是哪个input
{ required: true, message: '该输入项为必填项!1', trigger: 'blur' },
{ required: true, message: '该输入项为必填项!2', trigger: 'blur' },
{ required: true, message: '该输入项为必填项!3', trigger: 'blur' },
]
)
const fhs = () => {
console.log(ruleForm)
}
</script>
<style scoped>
:deep(.el-badge__content) {
background-color: black
}
</style>
效果图
拜拜!!!