Element?UI表單驗證規(guī)則動態(tài)失效問題的解決辦法
Element 版本:v2.15.3
問題背景
如下代碼所示:有一個上傳文件的 input 組件,在更新的時候,如果不上傳文件表示不更新,如果要更新則點擊 「重新上傳」按鈕將上傳組件顯示出來
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <!-- 這個字段不是必須的沒有寫 prop --> <el-form-item v-if="!updateDocument" label="文檔"> <el-button @click="updateDocument = true">重新上傳</el-button> <base-tips margin-left="15px">如需變更請重新上傳文檔</base-tips> </el-form-item> <!-- 要更新的話:這個字段要求必須,寫 prop --> <el-form-item v-if="updateDocument" label="文檔" prop="document"> <input :accept="supportFilesType" ref="documentFile" type="file" @change="documentFileChange"/> </el-form-item> </el-form>
也就是如上圖:不更新的話,該字段不是必須的,提交的時候就不會被校驗,如果更新的話,就要讓這個字段為必填項。
上述代碼:從頁面上看是正常的,有前面那個紅色的 * 號,但是在提交的時候,并沒有觸發(fā)驗證。
解決方案
首先:查看表單組件的信息,最終在 Field 這個屬性下發(fā)現(xiàn)了問題
console.log(this.$refs.form)
- 進入頁面的時候,F(xiàn)ield 中顯示的字段數(shù)量不包含 document,因為進入頁面默認是不更新
- 切換到更新狀態(tài),F(xiàn)ield 中的字段數(shù)量并沒有變更,那么問題就出現(xiàn)在這里了
這種情況的最主要原因是:表單組件沒有觸發(fā)重新渲染,解決方案靠譜的有:
- 在 el-form-item 上增加 key 屬性,也就是 vue 中的 key
- 在 el-form-item 上手動寫上指定的,rules
<!-- 寫上 prop,并且手動指定 rules,由于需要不校驗該字段,設置一個規(guī)則 required:false --> <el-form-item v-if="!updateDocument" label="文檔" prop="document" :rules="[{required:false}]"> <el-button @click="updateDocument = true">重新上傳</el-button> <base-tips margin-left="15px">如需變更合同請重新上傳文檔</base-tips> </el-form-item> <!-- 寫上 prop,由于需要驗證該字段,直接指向原來的 rules 中的規(guī)則--> <el-form-item v-if="updateDocument" label="文檔" prop="document" :rules="rules.document"> <input :accept="supportFilesType" ref="documentFile" type="file" @change="documentFileChange"/> </el-form-item>
總結
到此這篇關于Element UI表單驗證規(guī)則動態(tài)失效問題解決的文章就介紹到這了,更多相關ElementUI表單驗證規(guī)則動態(tài)失效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
輕量級富文本編輯器wangEditor結合vue使用方法示例
在我們項目中,有些時候需要使用富文本編輯器。本文將以百度開發(fā)的Ueditor結合Vue.js介紹一下。非常具有實用價值,需要的朋友可以參考下2018-10-10Vue生態(tài)系統(tǒng)工具庫Vueuse的使用示例詳解
Vueuse 是一個功能強大的 Vue.js 生態(tài)系統(tǒng)工具庫,它提供了一系列的可重用的 Vue 組件和函數(shù),本文將介紹 Vueuse 的主要特點和用法,以及它在 Vue.js 開發(fā)中的作用和優(yōu)勢,感興趣的可以了解下2024-02-02