elementUI 的resetField 是對對整個表單進行重置,將所有字段值重置為初始值並移除校驗結果 ,當內容不一致 或找不到內容時 就會報錯,具體原因舉例如下:
原因1:ruleForm 內部數據 與實際頁面需要驗證的數據不一致 比如:下面例子 頁面需要的是name ,而 ruleForm定義的是name2,當單詞不小心寫錯就會報這個問題
<el-form ref="newFormModel" :rules="rules" :model="ruleForm" :inline="true" style="width: calc(100%-50px); margin-left:50px;" min-width="1158px" class="demo-ruleForm" > <el-form-item label="Name" prop="name" class="my-el-form-item"> <el-input v-model="newObj.name" placeholder=""> </el-input> </el-form-item> <br> <el-form-item label="Country" prop="country" class="my-el-form-item"> <el-input v-model="newObj.country" placeholder=""> </el-input> </el-form-item> </el-form> script ruleForm: { name2: '', country: '' },
原因二:當表單有v-if 根據表單內部數據去控制是否顯示時 會存在這個問題
網上的部分解決方案:
1 使用 v-show 代替 v-if
2 使用 clearValidate 移除表單項的校驗結果。對有驗證的字段進行清空驗證error 內容,對不需要驗證的字段進行手動的初始化;
或者使用以上兩種方式結合 ,看自己項目的需要
驗證 兩種方法 並沒有徹底解決這個問題 :
Vue 實現響應式並不是數據發生變化之后 DOM 立即變化,而是按一定的策略進行 DOM 的更新,在修改數據之后使用 $nextTick,則可以在回調中獲取更新后的 DOM 就不會存在上面的報錯問題
this.$nextTick(() => { this.$refs.form.clearValidate() })