問題描述: iview Form表單提交時因資料格式不統一,有寫資料表單裡面含有陣列,驗證出現問題
1, iview表單驗證的步驟
-
1, Form 標籤裡面需要寫上 ref="FormData" :model="FormData" :rules="ruleValidate"
-
2, 給需要驗證的每個 FormItem標籤 設定prop="address" 屬性
-
3, Input標籤裡面是 v-model="address"
-
4, 在操作儲存按鈕時,新增方法驗證對整個表單進行校驗
this.$refs[name].validate((valid) => {
if (valid) {
...
}
}
複製程式碼
2, 因為表單資料格式的原因無法正常驗證表單
- 後端給的需要提交的資料格式如下
// 表單需要提交的資料
FormData: any = {
TeacherName: '',
address: '', // 老師的地址 需要進行必填欄位驗證
StudentOne: [
{
name: '',
age: '',
address: '',
sex: '' // 需要進行必填欄位驗證
}
],
StudentTwo: [
{
name: '',
age: '',
address: '',
sex: '' // 需要進行必填欄位驗證
}
]
}
複製程式碼
3, 錯誤程式碼如下:
- html部分程式碼如下
<Form ref="FormData" :model="FormData" :rules="ruleValidate" :label-width="100">
<!-- 班主任 資訊 -->
<FormItem label="班主任姓名:" prop="TeacherName">
<Input v-model="FormData.TeacherName" placeholder="請輸入班主任姓名"></Input>
</FormItem>
<FormItem label="班主任地址:" prop="address">
<Input v-model="FormData.address" placeholder="請輸入班主任地址"></Input>
</FormItem>
<!-- 學生1 資訊 -->
<FormItem label="學生1姓名:" prop="name">
<Input v-model="FormData.StudentOne[0].name" placeholder="請輸入學生1的姓名"></Input>
</FormItem>
<FormItem label="學生1性別:" prop="sex">
<Input v-model="FormData.StudentOne[0].sex" placeholder="請輸入學生1的性別"></Input>
</FormItem>
<FormItem label="學生1地址:" prop="address">
<Input v-model="FormData.StudentOne[0].address" placeholder="請輸入學生1地址"></Input>
</FormItem>
<!-- 學生2 資訊 -->
<FormItem label="學生2姓名:" prop="name">
<Input v-model="FormData.StudentTwo[0].name" placeholder="請輸入學生2的姓名"></Input>
</FormItem>
<FormItem label="學生2性別:" prop="sex">
<Input v-model="FormData.StudentTwo[0].sex" placeholder="請輸入學生2的性別"></Input>
</FormItem>
<FormItem label="學生2地址:" prop="address">
<Input v-model="FormData.StudentTwo[0].address" placeholder="請輸入學生2地址"></Input>
</FormItem>
</Form>
複製程式碼
- 驗證規則程式碼如下
ruleValidate: any = {
// 如果html程式碼如上,這個驗證規則的情況下是三個地址都會驗證的,是哪個地址都成了必填項
// 但是我們現在只需要必填老師的地址, 而兩個學生的地址是不必填的
// 並且這樣性別是驗證不到的
address: [
{ required: true, message: '請輸入班主任地址', trigger: 'blur' }
],
sex: [
{ required: true, message: '請輸入學生1性別', trigger: 'blur' }
]
}
複製程式碼
4, 正確程式碼如下:
- html部分程式碼如下
<Form ref="FormData" :model="FormData" :rules="ruleValidate" :label-width="100">
<!-- 班主任 資訊 -->
<FormItem label="班主任姓名:" prop="editName">
<Input v-model="FormData.editName" placeholder="請輸入班主任姓名"></Input>
</FormItem>
<FormItem label="班主任地址:" prop="address">
<Input v-model="FormData.address" placeholder="請輸入班主任地址"></Input>
</FormItem>
<!-- 學生1 資訊 -->
<FormItem label="學生1姓名:" prop="StudentOne[0].name">
<Input v-model="FormData.StudentOne[0].name" placeholder="請輸入學生1的姓名"></Input>
</FormItem>
<FormItem label="學生1性別:" prop="StudentOne[0].sex">
<Input v-model="FormData.StudentOne[0].sex" placeholder="請輸入學生1的性別"></Input>
</FormItem>
<FormItem label="學生1地址:" prop="StudentOne[0].address">
<Input v-model="FormData.StudentOne[0].address" placeholder="請輸入學生1地址"></Input>
</FormItem>
<!-- 學生2 資訊 -->
<FormItem label="學生2姓名:" prop="StudentTwo[0].name">
<Input v-model="FormData.StudentTwo[0].name" placeholder="請輸入學生2的姓名"></Input>
</FormItem>
<FormItem label="學生2性別:" prop="sex">
<Input v-model="FormData.StudentTwo[0].sex" placeholder="請輸入學生2的性別"></Input>
</FormItem>
<FormItem label="學生2地址:" prop="address">
<Input v-model="FormData.StudentTwo[0].address" placeholder="請輸入學生2地址"></Input>
</FormItem>
</Form>
複製程式碼
- 驗證規則程式碼如下
ruleValidate: any = {
address: [
{ required: true, message: '請輸入班主任地址', trigger: 'blur' }
],
'StudentOne[0].sex': [
{ required: true, message: '請輸入學生1性別', trigger: 'blur' }
],
'StudentTwo[0].sex': [
{ required: true, message: '請輸入學生2性別', trigger: 'blur' }
]
}
複製程式碼
備註:
1, 如果提交表單物件裡面含有陣列層級關係, 需要在prop裡面寫出來這個層級關係
prop="TeacherName" ( FormData下面的資料 )
prop="StudentTwo[0].name" (FormData 下面陣列裡面的資料 )
複製程式碼
2, 同時在驗證的時候也需要寫成層級關係,並且加上引號,如果不加引號會報錯
驗證關係裡面需要這樣寫-----> 'StudentOne[0].sex'
複製程式碼
-
如有問題,歡迎指正
-
本文為原創,如需轉載,請註明出處: iview 表單提交資料的時候驗證問題