vue3在table里使用elementUI的form表單驗證的示例代碼
常規(guī)情況下。rules和formItem是一對一的。例如下面的情況,判斷表單內(nèi)的測試1和測試2是否為空。
<template> <el-form :model="formParams.form" :rules="formParams.rules" > <el-form-item label="測試1" prop="input1"> <el-input v-model="formParams.form.input1"></el-input> </el-form-item> <el-form-item label="測試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("必填項,請輸入數(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ī)的寫法如下會發(fā)現(xiàn)不管如何輸入或刪除都將觸發(fā)valid=false校驗。如果在validator_isEmpty中打印value值會發(fā)現(xiàn),value一直未undefined。
<template> <el-form :model="tableData.data" :rules="tableData.rules" > <el-table :data="tableData.data"> <el-table-column label="測試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="測試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("必填項,請輸入數(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>
所以使用下面的方式。但是有幾個重點。
1、外層的el-form的model需要關(guān)聯(lián)到tableData.data,否則使用validate方法將無法觸發(fā)
2、去掉外層el-form的rules屬性
3、對el-table-column里的el-form-item添加rules屬性,其中rules中的validator采用bind的方式傳遞行參數(shù)
4、對el-table-column里的el-form-item中prop屬性需要保留
之后的操作就跟普通的form驗證一樣
<template> <el-form :model="tableData.data" > <el-table :data="tableData.data"> <el-table-column label="測試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="測試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("必填項,請輸入數(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表單驗證的文章就介紹到這了,更多相關(guān)vue3 elementUI的form表單驗證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue中使用pdf.js實現(xiàn)PDF文檔展示功能實例
最近做項目遇到在線預(yù)覽和下載pdf文件,試了多種pdf插件,例如jquery.media.js(ie無法直接瀏覽),最后選擇了pdf.js插件,這篇文章主要介紹了Vue中使用pdf.js實現(xiàn)PDF文檔展示功能的相關(guān)資料,需要的朋友可以參考下2025-04-04webpack+vue-cil 中proxyTable配置接口地址代理操作
這篇文章主要介紹了webpack+vue-cil 中proxyTable配置接口地址代理操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07vue項目如何引入element?ui、iview和echarts
這篇文章主要介紹了vue項目如何引入element?ui、iview和echarts,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09解析使用useDark(),發(fā)現(xiàn)transition?動畫失效
這篇文章主要為大家介紹了使用useDark(),發(fā)現(xiàn)transition動畫失效的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05使用Vue.js和Element-UI做一個簡單登錄頁面的實例
下面小編就為大家分享一篇使用Vue.js和Element-UI做一個簡單登錄頁面的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02vue-router配合ElementUI實現(xiàn)導(dǎo)航的實例
下面小編就為大家分享一篇vue-router配合ElementUI實現(xiàn)導(dǎo)航的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02