關(guān)于通過v-if渲染的element-ui表單,校驗(yàn)規(guī)則不生效的問題

2021-7-2    前端達(dá)人

記錄關(guān)于通過v-if渲染的element-ui表單,校驗(yàn)規(guī)則不生效的問題

代碼

 <el-form ref="form" :model="form" :rules="rules" label-width="124px"> <template v-if="show1"> <el-form-item label="標(biāo)題1" prop="requestType"> <el-input size="mini" v-model="form.requestType" /> </el-form-item> </template> <template v-if="show2"> <el-form-item label="標(biāo)題2" prop="requestData"> <el-input size="mini" v-model="form.requestData" /> </el-form-item> </template> </el-form> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

原因:
因?yàn)閒orm-item綁定驗(yàn)證事件是在mounted中進(jìn)行的,規(guī)則變化后沒有進(jìn)行重新綁定驗(yàn)證事件,v-if渲染組件節(jié)點(diǎn)diff后被復(fù)用了,所以驗(yàn)證也就自然失效了

參考回答:v-if案例解析(element-ui form-item 結(jié)合 v-if 動(dòng)態(tài)生成rule規(guī)則\表單元素,表單無法驗(yàn)證問題剖析 )
感興趣的小伙伴可以學(xué)習(xí)一下

解決方案:

  1. 給每一個(gè)el-form-item添加一個(gè)key屬性區(qū)分
 <el-form ref="form" :model="form" :rules="rules" label-width="124px"> <template v-if="show1"> <el-form-item label="標(biāo)題1" prop="requestType"> <el-input size="mini" v-model="form.requestType" /> </el-form-item> </template> <template v-if="show2"> <el-form-item key="1" label="標(biāo)題2" prop="requestData"> <el-input size="mini" v-model="form.requestData" /> </el-form-item> </template> </el-form> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

如果v-if渲染的目標(biāo)是整個(gè)表單,則在form標(biāo)簽寫入key

  1. 直接在el-form-item中寫rules
 <el-form ref="form" :model="form" :rules="rules" label-width="124px"> <template v-if="show1"> <el-form-item label="標(biāo)題1" prop="requestType"> <el-input size="mini" v-model="form.requestType" /> </el-form-item> </template> <template v-if="show2"> <el-form-item label="標(biāo)題2" prop="requestData" :rules="{ required: true, message: 'xxx不能為空', trigger: 'blur' }"> <el-input size="mini" v-model="form.requestData" /> </el-form-item> </template> </el-form> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

:rules="{ required: true, message: ‘xxx不能為空’, trigger: ‘blur’ }"

這里需要注意JavaScript中的單引號(hào)''與雙引號(hào)""的使用規(guī)范


還有很多方法可以解決這個(gè)問題,這里只記錄我用過的其中兩個(gè)方法。有其他解決方法的同學(xué)歡迎留言討論!

藍(lán)藍(lán)設(shè)計(jì)建立了UI設(shè)計(jì)分享群,每天會(huì)分享國內(nèi)外的一些優(yōu)秀設(shè)計(jì),如果有興趣的話,可以進(jìn)入一起成長學(xué)習(xí),請(qǐng)掃碼藍(lán)小助,報(bào)下信息,藍(lán)小助會(huì)請(qǐng)您入群。歡迎您加入噢~~希望得到建議咨詢、商務(wù)合作,也請(qǐng)與我們聯(lián)系。

截屏2021-05-13 上午11.41.03.png


轉(zhuǎn)自:csdn
分享此文一切功德,皆悉回向給文章原作者及眾讀者.

免責(zé)聲明:藍(lán)藍(lán)設(shè)計(jì)尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問題,請(qǐng)及時(shí)與我們?nèi)〉寐?lián)系,我們立即更正或刪除。

藍(lán)藍(lán)設(shè)計(jì)bouu.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)

分享本文至:

日歷

鏈接

個(gè)人資料

存檔