如何解決this.$refs.form.validate()不執(zhí)行的問題
this.$refs.form.validate()不執(zhí)行問題
問題
使用以下方法獲取校驗狀態(tài)的時候,一直獲取不到,console沒有結(jié)果輸出
this.$refs.form.validate().then(valid => { console.log(valid) })
原因
①存在沒有加入驗證規(guī)則的 prop
如:在代碼中寫了很多這樣的 prop,作為需要驗證的字段:
<FormItem label="URL過濾" prop="groupId">
但是,在定義的 rules 里面沒有出現(xiàn)該 prop:
rules: { schemaId: [{ required: true, message: '必填'}], }
注意:一般來講,多加上 prop 不會有問題,還有可能是自定義的校驗有問題
② 自定義校驗規(guī)則存在沒有調(diào)用到 callback() 的情況
如:沒有驗證 value 為空的情況:
const validateFilter = (rule, value, callback) => { if (!value.every(item => HTTPHEADER_KEYWORD_REGEXP.test(item))) { callback(new Error('關(guān)鍵字格式錯誤:每個最長255字符,不能包含中文')) } else if (value.join('').length > 2048) { callback(new Error('錯誤:總長度不能超過2048字符')) } else { callback() } }
上述判斷中沒有考慮到 value 為空的情況也要執(zhí)行一次 callback(),因此當 value 為空時校驗狀態(tài)也不執(zhí)行。
const validateFilter = (rule, value, callback) => { if (!value) { callback() } else if (!value.every(item => HTTPHEADER_KEYWORD_REGEXP.test(item))) { callback(new Error('關(guān)鍵字格式錯誤:每個最長255字符,不能包含中文')) } else if (value.join('').length > 2048) { callback(new Error('錯誤:總長度不能超過2048字符')) } else { callback() } }
解決思路:
- 根據(jù)框架文檔,檢查代碼書寫規(guī)范
- 打印this.$refs.form.validate(),看狀態(tài),如果狀態(tài)是pedding(待辦),還沒有執(zhí)行完成,繼續(xù)看校驗規(guī)則問題,是否考慮全面需要執(zhí)行 callback() 的情況。
this.$refs.form.validate()不起作用
問題描述?
使用該方法獲取校驗狀態(tài)的時候,一直獲取不到,console沒有結(jié)果輸出
this.$refs.form.validate().then((valid) => { ? ? console.log(valid) });
解決方法
去掉沒有加入驗證規(guī)則的prop
什么意思呢?
我在代碼中寫了很多這樣的prop,作為需要校驗的字段
<FormItem label="跨網(wǎng)網(wǎng)關(guān)" prop="groupId">
但是,在我定義的rules里面沒有出現(xiàn)該prop
rules: { ? ?schemaId: [{required: true, message: '必填'}], },
解決思路
因為我使用的是ivew框架,所以我會先去ivew官網(wǎng)查看一番,一般一些比較簡單的問題,直接翻官網(wǎng)都能得到解決,但是我這種比較無厘頭的問題,很明顯,我在官網(wǎng)并沒有得到什么實質(zhì)性的收獲
上百度,就算不能從前輩或同行那里得到什么實質(zhì)性的解決,但最少也能開闊一下自己的腦洞。
我就順帶說下我得收獲:
確定自定義得規(guī)則在最后都進行了callback()回調(diào)
可以自己將this.$refs.form.validate()打印出來看看狀態(tài)
雖然看上去,并沒有什么實質(zhì)性得解決,但是我從中明白了,肯定是我的校驗沒有完成,二話不多說。
console.log(this.$refs.form.validate())
果不其然啊,我的狀態(tài)是pedding(待辦)狀態(tài),還沒有執(zhí)行完成,這個時候又繼續(xù)排查,確保校驗規(guī)則沒有問題,那么就只能是上面,我自己定義多了prop字段,去掉后,正常呢。
一般來講多加上prop不會有問題,還有可能是你的自定義的校驗有問題(有可能是你的自定義規(guī)則里面沒有寫callback(),檢查一下)。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue 動態(tài)添加/刪除dom元素節(jié)點的操作代碼
這篇文章主要介紹了vue 動態(tài)添加/刪除dom元素,需要在點擊添加時,增加一行key/value的輸入框;點擊垃圾桶圖標時,刪除對應行,本文結(jié)合實例代碼給大家講解的非常詳細,需要的朋友可以參考下2022-12-12web面試MVC與MVVM區(qū)別及Vue為什么不完全遵守MVVM解答
這篇文章主要介紹了web面試中常問問題,MVC與MVVM區(qū)別以及Vue為什么不完全遵守MVVM的難點解答,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09vue element 中的table動態(tài)渲染實現(xiàn)(動態(tài)表頭)
這篇文章主要介紹了vue element 中的table動態(tài)渲染實現(xiàn)(動態(tài)表頭),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11關(guān)于Vue不能監(jiān)聽(watch)數(shù)組變化的解決方法
本文主要介紹了Vue不能監(jiān)聽(watch)數(shù)組變化的解決方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09mpvue中配置vuex并持久化到本地Storage圖文教程解析
這篇文章主要介紹了mpvue中配置vuex并持久化到本地Storage的教程詳解,# 配置vuex和在vue中相同,只是mpvue有一個坑,就是不能直接在new Vue的時候傳入store。本文分步驟給大家介紹的非常詳細,需要的朋友參考下吧2018-03-03vuex刷新之后數(shù)據(jù)丟失,數(shù)據(jù)持久化,vuex-persistedstate問題
這篇文章主要介紹了vuex刷新之后數(shù)據(jù)丟失,數(shù)據(jù)持久化,vuex-persistedstate問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03