vue3在table里使用elementUI的form表單驗(yàn)證的示例代碼
常規(guī)情況下。rules和formItem是一對(duì)一的。例如下面的情況,判斷表單內(nèi)的測(cè)試1和測(cè)試2是否為空。
<template> <el-form :model="formParams.form" :rules="formParams.rules" > <el-form-item label="測(cè)試1" prop="input1"> <el-input v-model="formParams.form.input1"></el-input> </el-form-item> <el-form-item label="測(cè)試2" prop="input2"> <el-input v-model="formParams.form.input2"></el-input> </el-form-item> </el-form> </template> <script lang="ts" setup> import {reactive} from "vue"; const formParams = reactive({ form:{ input1: "", input2: "" }, rules: { input1: { validator: validator_isEmpty, trigger: 'change' }, input2: { validator: validator_isEmpty, trigger: 'change' } } }) function validator_isEmpty (rule: any, value: string, callback: any) { if (isEmpty(value)) { callback(new Error("必填項(xiàng),請(qǐng)輸入數(shù)據(jù)")); } else { callback(); } } const isEmpty = function (value: any) { if ( value === null || value === undefined || value === "" || value.toString().trim() === "" || value.length === 0 || Object.keys(value.toString()).length === 0 || JSON.stringify(value) === "[{}]" ) { return true; } else { return false; } } </script> <style scoped lang="scss"> </style>
但是,如果在table中就按照常規(guī)的寫法如下會(huì)發(fā)現(xiàn)不管如何輸入或刪除都將觸發(fā)valid=false校驗(yàn)。如果在validator_isEmpty中打印value值會(huì)發(fā)現(xiàn),value一直未undefined。
<template> <el-form :model="tableData.data" :rules="tableData.rules" > <el-table :data="tableData.data"> <el-table-column label="測(cè)試1"> <template #default="scope"> <el-form-item prop="input1"> <el-input v-model="scope.row.input1"></el-input> </el-form-item> </template> </el-table-column> <el-table-column label="測(cè)試2"> <template #default="scope"> <el-form-item prop="input2"> <el-input v-model="scope.row.input2"></el-input> </el-form-item> </template> </el-table-column> </el-table> </el-form> </template> <script lang="ts" setup> import {reactive} from "vue"; let tableData = reactive({ data:[ { input1: "", input2: "" } ], rules: { input1: { validator: validator_isEmpty, trigger: 'change' }, input2: { validator: validator_isEmpty, trigger: 'change' } } }) const formParams = reactive({ form: { input1: "", input2: "" }, rules: { input1: { validator: validator_isEmpty, trigger: 'change' }, input2: { validator: validator_isEmpty, trigger: 'change' } } }) function validator_isEmpty(rule: any, value: string, callback: any) { if (isEmpty(value)) { callback(new Error("必填項(xiàng),請(qǐng)輸入數(shù)據(jù)")); } else { callback(); } } const isEmpty = function (value: any) { if ( value === null || value === undefined || value === "" || value.toString().trim() === "" || value.length === 0 || Object.keys(value.toString()).length === 0 || JSON.stringify(value) === "[{}]" ) { return true; } else { return false; } } </script> <style scoped lang="scss"> </style>
所以使用下面的方式。但是有幾個(gè)重點(diǎn)。
1、外層的el-form的model需要關(guān)聯(lián)到tableData.data,否則使用validate方法將無法觸發(fā)
2、去掉外層el-form的rules屬性
3、對(duì)el-table-column里的el-form-item添加rules屬性,其中rules中的validator采用bind的方式傳遞行參數(shù)
4、對(duì)el-table-column里的el-form-item中prop屬性需要保留
之后的操作就跟普通的form驗(yàn)證一樣
<template> <el-form :model="tableData.data" > <el-table :data="tableData.data"> <el-table-column label="測(cè)試1"> <template #default="scope"> <el-form-item prop="input1" :rules="{ validator: validator_isEmpty_arg.bind(this, scope.row.input1), trigger: 'change' }"> <el-input v-model="scope.row.input1"></el-input> </el-form-item> </template> </el-table-column> <el-table-column label="測(cè)試2"> <template #default="scope"> <el-form-item prop="input2" :rules="{ validator: validator_isEmpty_arg.bind(this, scope.row.input2), trigger: 'change' }"> <el-input v-model="scope.row.input2"></el-input> </el-form-item> </template> </el-table-column> </el-table> </el-form> </template> <script lang="ts" setup> import {reactive} from "vue"; let tableData = reactive({ data: [ { input1: "", input2: "" } ] }) function validator_isEmpty_arg(rowValue: any, rule: any,value: string, callback: any){ if (isEmpty(rowValue)) { callback(new Error("必填項(xiàng),請(qǐng)輸入數(shù)據(jù)")); } else { callback(); } } const isEmpty = function (value: any) { if ( value === null || value === undefined || value === "" || value.toString().trim() === "" || value.length === 0 || Object.keys(value.toString()).length === 0 || JSON.stringify(value) === "[{}]" ) { return true; } else { return false; } } </script> <style scoped lang="scss"> </style>
到此這篇關(guān)于vue3在table里使用elementUI的form表單驗(yàn)證的文章就介紹到這了,更多相關(guān)vue3 elementUI的form表單驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue中使用pdf.js實(shí)現(xiàn)PDF文檔展示功能實(shí)例
最近做項(xiàng)目遇到在線預(yù)覽和下載pdf文件,試了多種pdf插件,例如jquery.media.js(ie無法直接瀏覽),最后選擇了pdf.js插件,這篇文章主要介紹了Vue中使用pdf.js實(shí)現(xiàn)PDF文檔展示功能的相關(guān)資料,需要的朋友可以參考下2025-04-04webpack+vue-cil 中proxyTable配置接口地址代理操作
這篇文章主要介紹了webpack+vue-cil 中proxyTable配置接口地址代理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07Vue項(xiàng)目History模式404問題解決方法
本文主要解決Vue項(xiàng)目使用History模式發(fā)布到服務(wù)器Nginx上刷新頁面404問題。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-10-10vue項(xiàng)目如何引入element?ui、iview和echarts
這篇文章主要介紹了vue項(xiàng)目如何引入element?ui、iview和echarts,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09解析使用useDark(),發(fā)現(xiàn)transition?動(dòng)畫失效
這篇文章主要為大家介紹了使用useDark(),發(fā)現(xiàn)transition動(dòng)畫失效的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05使用Vue.js和Element-UI做一個(gè)簡(jiǎn)單登錄頁面的實(shí)例
下面小編就為大家分享一篇使用Vue.js和Element-UI做一個(gè)簡(jiǎn)單登錄頁面的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-02-02vue-router配合ElementUI實(shí)現(xiàn)導(dǎo)航的實(shí)例
下面小編就為大家分享一篇vue-router配合ElementUI實(shí)現(xiàn)導(dǎo)航的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-02-02