antd?select?多選限制個(gè)數(shù)的實(shí)現(xiàn)代碼
antd select 多選限制個(gè)數(shù)
直接給出源碼
<template> <a-select v-model="college" mode="multiple" :maxTagCount="2" autocomplete="off" style="width: 252px;margin-top:10px;margin-right: 28px" :getPopupContainer="triggerNode => triggerNode.parentNode" > <a-select-option v-for="item in collegeList" :key="item.id" :value="item.name" :disabled="college.length >= 5 && college.findIndex(o => o === item.name) === -1" > {{ item.name }} </a-select-option> </a-select> </template> <script> data() { return { collegeList: [], college: [] } }, </script>
其中核心代碼在于disabled
其中 collegeList數(shù)據(jù)結(jié)構(gòu)
[ { "city": "北京市", "code": "4111010001", "createBy": null, "createTime": null, "department": "教育部", "id": 1, "level": "本科", "name": "北京大學(xué)", "updateBy": null, "updateTime": null }, { "city": "北京市", "code": "4111010002", "createBy": null, "createTime": null, "department": "教育部", "id": 2, "level": "本科", "name": "中國(guó)人民大學(xué)", "updateBy": null, "updateTime": null }, { "city": "北京市", "code": "4111010003", "createBy": null, "createTime": null, "department": "教育部", "id": 3, "level": "本科", "name": "清華大學(xué)", "updateBy": null, "updateTime": null } ]
再看一個(gè)復(fù)雜一點(diǎn)的例子:
<a-select v-model="safeGroup" mode="multiple" placeholder="請(qǐng)選擇安全組" class="long-input" :getPopupContainer="triggerNode => triggerNode.parentNode" @change="handleSafeChange" > <a-select-option v-for="item in SafeGroupList" :key="item.safeGroupId" :value="JSON.stringify(item)" :disabled=" safeGroup.length >= 5 && safeGroup.findIndex(o => JSON.parse(o).safeGroupId === item.safeGroupId) === -1 " > <ellipsis :length="20"> {{ item.safeGroupName }}</ellipsis> </a-select-option> </a-select>
其中對(duì)v-model綁定的數(shù)據(jù)處理在@chang方法里
handleSafeChange(e) { if (e) { this.dispalySafe = false this.safeGroup = e const arr1 = e.map(x => { return JSON.parse(x) }) const arr2 = e.map(x => { return JSON.parse(x).safeGroupId }) this.$emit('handleSafeChange', arr2, arr1) } },
關(guān)于antd Select 限制選擇個(gè)數(shù)的解決方案
應(yīng)用場(chǎng)景描述:
Select 被form 所包裹,且被getFieldDecorator修飾。所以值的改變應(yīng)該通過(guò)form的setFieldsValue方法。
Select模式肯定會(huì)是multiple。且以最多三個(gè)值舉例。
解決思路如下:
1 起初是想在Select的onchange事件中判斷values的數(shù)量,數(shù)量大于三個(gè)的時(shí)候來(lái)重新setFieldsValue;且把最后的選項(xiàng)值替換成剛剛選擇的值。
后來(lái)發(fā)現(xiàn)setFieldsValue方法不起作用,Select的值會(huì)一直增加。后來(lái)想想可能是 setFieldsValue與onchange 沖突,通過(guò)setFieldsValue 無(wú)法改變onchange后的值。
2 最后通過(guò)重新查看文檔。發(fā)現(xiàn)還有一個(gè)方法可用,即 validator。驗(yàn)證值,通過(guò)驗(yàn)證所選值的數(shù)量是否大于三個(gè),然后重新setFieldsValue ;發(fā)現(xiàn)此法可行。從而解決該疑難雜癥。
好,最后附上代碼供參考:
changeValues = (rule ,value , callback)=> { const { setFieldsValue } = this.props.form ; let newArr ; if (value.length > 3){ newArr = [].concat(value.slice(0,2), value.slice(-1) ) ; setFieldsValue({ "languages" : newArr , }) callback(‘最多選擇三種語(yǔ)言‘) } else { newArr = value ; callback() } } {getFieldDecorator(‘languages‘, { rules:[{required: true,message : ‘請(qǐng)選擇三種語(yǔ)言‘, validator : changeValues }], validateTrigger : ‘onChange‘, })( 1 2 3 4 5 )}
到此這篇關(guān)于antd select 多選限制個(gè)數(shù)的文章就介紹到這了,更多相關(guān)antd select 限制個(gè)數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue2和vue3部署到服務(wù)器子目錄為空白頁(yè)問(wèn)題及解決
這篇文章主要介紹了vue2和vue3部署到服務(wù)器子目錄為空白頁(yè)問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07vue 1.x 交互實(shí)現(xiàn)仿百度下拉列表示例
本篇文章主要介紹了vue 1.x 交互實(shí)現(xiàn)仿百度下拉列表示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10vue使用數(shù)組splice方法失效,且總刪除最后一項(xiàng)的問(wèn)題及解決
這篇文章主要介紹了vue使用數(shù)組splice方法失效,且總刪除最后一項(xiàng)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Nginx同一端口部署多個(gè)前后端分離的vue項(xiàng)目完整步驟
最近做項(xiàng)目結(jié)構(gòu)優(yōu)化,前端項(xiàng)目都是部署在nginx上,想實(shí)現(xiàn)同一個(gè)端口可以訪問(wèn)多個(gè)前端項(xiàng)目,所以就有了本文,這篇文章主要給大家介紹了關(guān)于Nginx同一端口部署多個(gè)前后端分離的vue項(xiàng)目的相關(guān)資料,需要的朋友可以參考下2023-10-10vue.js數(shù)據(jù)綁定的方法(單向、雙向和一次性綁定)
本篇文章主要介紹了vue.js數(shù)據(jù)綁定的方法(單向、雙向和一次性綁定),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Vue-CLI 項(xiàng)目在pycharm中配置方法
這篇文章主要介紹了Vue-CLI 項(xiàng)目在pycharm中配置方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08Vue調(diào)用PC攝像頭實(shí)現(xiàn)拍照功能
這篇文章主要為大家詳細(xì)介紹了Vue調(diào)用PC攝像頭實(shí)現(xiàn)拍照功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Vue實(shí)現(xiàn)半自動(dòng)打字機(jī)特效
本文主要介紹了Vue實(shí)現(xiàn)半自動(dòng)打字機(jī)特效,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12