如何解決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: '必填'}],
}注意:一般來講,多加上 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ǎng)并沒有得到什么實(shí)質(zhì)性的收獲
上百度,就算不能從前輩或同行那里得到什么實(shí)質(zhì)性的解決,但最少也能開闊一下自己的腦洞。
我就順帶說下我得收獲:
確定自定義得規(guī)則在最后都進(jìn)行了callback()回調(diào)
可以自己將this.$refs.form.validate()打印出來看看狀態(tài)
雖然看上去,并沒有什么實(shí)質(zhì)性得解決,但是我從中明白了,肯定是我的校驗(yàn)沒有完成,二話不多說。
console.log(this.$refs.form.validate())
果不其然啊,我的狀態(tài)是pedding(待辦)狀態(tài),還沒有執(zhí)行完成,這個(gè)時(shí)候又繼續(xù)排查,確保校驗(yàn)規(guī)則沒有問題,那么就只能是上面,我自己定義多了prop字段,去掉后,正常呢。
一般來講多加上prop不會(huì)有問題,還有可能是你的自定義的校驗(yàn)有問題(有可能是你的自定義規(guī)則里面沒有寫callback(),檢查一下)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue+Java 通過websocket實(shí)現(xiàn)服務(wù)器與客戶端雙向通信操作
這篇文章主要介紹了Vue+Java 通過websocket實(shí)現(xiàn)服務(wù)器與客戶端雙向通信操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
vue3實(shí)現(xiàn)ai聊天對(duì)話框功能
這篇文章主要介紹了vue3實(shí)現(xiàn)ai聊天對(duì)話框功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-12-12
Vue3實(shí)現(xiàn)手寫簽名之Vue3-signature的快速應(yīng)用實(shí)例
簽名組件在許多應(yīng)用場(chǎng)景中都非常有用,比如在線合同簽署、電子表格簽名等,這篇文章主要介紹了Vue3實(shí)現(xiàn)手寫簽名之Vue3-signature的快速應(yīng)用的相關(guān)資料,需要的朋友可以參考下2026-04-04
如何解決vue-json-editor無法輸入中文、重影問題
文章介紹了如何解決vue-json-editor組件無法輸入中文和重影的問題,通過修改源碼并使用vue-json-edit-fix-cn組件來 fix 這兩個(gè)問題,同時(shí),文章還提供了如何移除舊的依賴包并安裝新的依賴包的步驟2025-01-01
vue 解決computed修改data數(shù)據(jù)的問題
今天小編就為大家分享一篇vue 解決computed修改data數(shù)據(jù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11
vue項(xiàng)目中,main.js,App.vue,index.html的調(diào)用方法
今天小編就為大家分享一篇vue項(xiàng)目中,main.js,App.vue,index.html的調(diào)用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09

