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