ant-design-vue 實現(xiàn)表格內(nèi)部字段驗證功能
表格內(nèi) column 可輸入的需求還是很常見的,尤其有一些業(yè)務(wù)場景就是表單內(nèi)部有一個表格,然后表格的某些列是個進(jìn)行輸入的,就像下面這樣
- 下單數(shù)量 內(nèi)容不能為空
- 下單數(shù)量 必須輸入正整數(shù)
翻閱 ant-design-vue 官網(wǎng)并沒有發(fā)現(xiàn)說表單內(nèi)表格字段驗證的方案,但是有一個 自行處理表單數(shù)據(jù) 的介紹
那我們是不是可以參考這個方案去實現(xiàn)咱自己的業(yè)務(wù)需求呢,下面就開始說一下實現(xiàn)方案
<a-table :columns="columns" bordered :rowKey="col => col.id" :dataSource="tableData" > <a-form-item :label-col="{ xs: { span: 0 }, sm: { span: 0 }, }" :wrapper-col="{ xs: { span: 24 }, sm: { span: 24 }, }" :validate-status="getFildStatus(record.id).validateStatus" :help="getFildStatus(record.id).errorMsg" slot="goodModelCount" slot-scope="text, record"> <a-input style="width: 100%" :min="1" v-model="text.goodModelCount" @change="handleChange(text.goodModelCount, record.id)" /> </a-form-item> <div slot="action" slot-scope="text, record"> <a href="javascript:;" rel="external nofollow" ><a-icon type="delete" /></a> </div> </a-table> <script> const columns = [ { title: '商品名稱', dataIndex: 'id', align: 'center' }, { title: '商品型號', dataIndex: 'account', align: 'center' }, { title: '型號價格', dataIndex: 'area', align: 'center' }, { title: '下單數(shù)量', key: 'goodModelCount', align: 'center', width: '200px', scopedSlots: { customRender: 'goodModelCount' }, align: 'center', }, { title: '操作', scopedSlots: { customRender: 'action' }, width: '150px', align: 'center',} ] function validatePrimeNumber(number) { if (/^[1-9]\d*|0$/.test(number)) { return { validateStatus: 'success', errorMsg: '', }; } return { validateStatus: 'error', errorMsg: '下單數(shù)量不能為空', }; } export default { name: 'order-dialog', data() { return { visible: true, labelCol: { xs: { span: 24 }, sm: { span: 7 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 12 }, }, form: this.$form.createForm(this), validatorRules: { consigneeName: { rules: [ { required: true, message: '請輸入收貨人姓名' } ] }, consigneePhone: { rules: [ { required: true, message: '請輸入收貨人聯(lián)系電話' } ] }, addresseeAddressDetail: { rules: [ { required: true, message: '請輸入收貨地址詳情' } ] } }, columns: columns, tableData: [{ id: 1, account: 123, area: 123, goodModelCount: 3434}, { id: 2, account: 123, area: 123, goodModelCount: 111}], goodModelCountData: [] } }, methods: { getFildStatus(id) { const data = this.goodModelCountData.filter(item => id === item.id)[0] if (data) { return data } else { return { errorMsg: '', validateStatus: 'success' } } }, handleChange(value, id) { const newData = [...this.tableData]; const target = newData.filter(item => item.id === id)[0] if (target) { const { errorMsg, validateStatus } = validatePrimeNumber(value) let flag = true this.goodModelCountData.forEach(val => { if (val.id === id) { flag = false val.errorMsg = errorMsg, val.validateStatus = validateStatus } }) if (flag) { this.goodModelCountData.push({ id, errorMsg, validateStatus }) } target.goodModelCount = value this.tableData = newData } }, handleOk() { this.visible = false } } } </script>
重點(diǎn)注意兩個屬性:
- validate-status 校驗狀態(tài),可選 ‘success', ‘warning', ‘error', ‘validating'
- help 設(shè)置校驗文案
在 vue 里面是允許我們在屬性里面以 函數(shù) 的形式返回屬性的,所以我們可以把驗證規(guī)則放到函數(shù)里里面 validatePrimeNumber (函數(shù)名字最好還是語義化明確一些,我這邊直接復(fù)制的官方文檔上的)
需要進(jìn)行驗證的字段(需要在 a-table 標(biāo)簽內(nèi)部)
<a-form-item :label-col="{ xs: { span: 0 }, sm: { span: 0 }, }" :wrapper-col="{ xs: { span: 24 }, sm: { span: 24 }, }" :validate-status="getFildStatus(record.id).validateStatus" :help="getFildStatus(record.id).errorMsg" slot="goodModelCount" slot-scope="text, record"> <a-input style="width: 100%" :min="1" v-model="text.goodModelCount" @change="handleChange(text.goodModelCount, record.id)" /> </a-form-item>
當(dāng)我們輸入框進(jìn)行輸入的時候我們就會出發(fā) handleChange 方法,在方法里里面我們?nèi)ミM(jìn)行輸入內(nèi)容的驗證,然后根據(jù)id從 getFildStatus 找到當(dāng)前對象,然后進(jìn)行驗證。
如果列表內(nèi)有多列需要進(jìn)行驗證,那么就需要主要這個數(shù)據(jù)格式怎么定了了,根據(jù)實際需求進(jìn)行參考
總結(jié)
以上所述是小編給大家介紹的ant-design-vue 實現(xiàn)表格內(nèi)部字段驗證功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
基于vue2.0的活動倒計時組件countdown(附源碼下載)
這是一款基于vue2.0的活動倒計時組件,可以使用服務(wù)端時間作為當(dāng)前時間,在倒計時開始和結(jié)束時可以自定義回調(diào)函數(shù)。這篇文章主要介紹了基于vue2.0的活動倒計時組件countdown,需要的朋友可以參考下2018-10-10element-ui中表格設(shè)置正確的排序及設(shè)置默認(rèn)排序
表格中有時候會有排序的需求,下面這篇文章主要給大家介紹了關(guān)于element-ui中表格設(shè)置正確的排序及設(shè)置默認(rèn)排序的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05nuxt.js添加環(huán)境變量,區(qū)分項目打包環(huán)境操作
這篇文章主要介紹了nuxt.js添加環(huán)境變量,區(qū)分項目打包環(huán)境操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Vue使用axios進(jìn)行數(shù)據(jù)異步交互的方法
大家都知道在Vue里面有兩種出名的插件能夠支持發(fā)起異步數(shù)據(jù)傳輸和接口交互,分別是axios和vue-resource,同時vue更新到2.0之后,宣告不再對vue-resource更新,而是推薦的axios,今天就講一下怎么引入axios,需要的朋友可以參考下2024-01-01Vue 中 filter 與 computed 的區(qū)別與用法解析
這篇文章主要介紹了Vue 中 filter 與 computed 的區(qū)別與用法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-11-11在Vue中使用scoped屬性實現(xiàn)樣式隔離的原因解析
scoped是Vue的一個特殊屬性,可以應(yīng)用于<style>標(biāo)簽中的樣式,這篇文章給大家介紹在Vue中,使用scoped屬性為什么可以實現(xiàn)樣式隔離,感興趣的朋友一起看看吧2023-12-12