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)文章
使用vuetify實(shí)現(xiàn)全局v-alert消息通知的方法
使用強(qiáng)大的Vuetify開(kāi)發(fā)前端頁(yè)面,結(jié)果發(fā)現(xiàn)官方?jīng)]有提供簡(jiǎn)便的全局消息通知組件,所以自己動(dòng)手寫(xiě)了一個(gè)簡(jiǎn)單的組件,接下來(lái)通過(guò)本文給大家介紹使用vuetify實(shí)現(xiàn)全局v-alert消息通知的詳細(xì)代碼,感興趣的朋友跟隨小編一起看看吧2024-02-02
Vue如何實(shí)現(xiàn)簡(jiǎn)單的時(shí)間軸與時(shí)間進(jìn)度條
作為一個(gè)前端初學(xué)者,公司項(xiàng)目中前端需要一個(gè)進(jìn)度條,所以下面這篇文章主要給大家介紹了關(guān)于Vue如何實(shí)現(xiàn)簡(jiǎn)單的時(shí)間軸與時(shí)間進(jìn)度條的相關(guān)資料,需要的朋友可以參考下2022-09-09
快速解決electron-builder打包時(shí)下載依賴慢的問(wèn)題
使用 Electron-builder 打包,有時(shí)會(huì)在下載Electron、nsis、winCodeSign的過(guò)程中 Timeout 導(dǎo)致打包失敗,本文給大家分享快速解決electron-builder打包時(shí)下載依賴慢的問(wèn)題,感興趣的朋友一起看看吧2024-02-02
vue實(shí)現(xiàn)導(dǎo)出excel的多種方式總結(jié)
在Vue中實(shí)現(xiàn)導(dǎo)出Excel有多種方式,可以通過(guò)前端實(shí)現(xiàn),也可以通過(guò)前后端配合實(shí)現(xiàn),這篇文章將為大家詳細(xì)介紹幾種常用的實(shí)現(xiàn)方式,需要的可以參考下2023-08-08
使用webpack-obfuscator進(jìn)行代碼混淆及報(bào)錯(cuò)解決過(guò)程
隨著前端應(yīng)用的復(fù)雜度增加,保護(hù)客戶端的JavaScript代碼變得更為重要,webpack-obfuscator插件通過(guò)對(duì)代碼進(jìn)行混淆,如變量重命名、字符串加密等,提高代碼的保密性,防止源碼被輕易查看或修改2024-10-10

