當(dāng)選項(xiàng)過(guò)多時(shí),使用下拉菜單展示并選擇內(nèi)容。
適用廣泛的基礎(chǔ)單選
v-model的值為當(dāng)前被選中的el-option的 value 屬性值
<template>
<el-select v-model="value" placeholder="請(qǐng)選擇">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
<script>
export default {
data() {
return {
options: [
{
value: '選項(xiàng)1',
label: '黃金糕',
},
{
value: '選項(xiàng)2',
label: '雙皮奶',
},
{
value: '選項(xiàng)3',
label: '蚵仔煎',
},
{
value: '選項(xiàng)4',
label: '龍須面',
},
{
value: '選項(xiàng)5',
label: '北京烤鴨',
},
],
value: '',
}
},
}
</script>
在el-option中,設(shè)定disabled值為 true,即可禁用該選項(xiàng)
<template>
<el-select v-model="value" placeholder="請(qǐng)選擇">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
:disabled="item.disabled"
>
</el-option>
</el-select>
</template>
<script>
export default {
data() {
return {
options: [
{
value: '選項(xiàng)1',
label: '黃金糕',
},
{
value: '選項(xiàng)2',
label: '雙皮奶',
disabled: true,
},
{
value: '選項(xiàng)3',
label: '蚵仔煎',
},
{
value: '選項(xiàng)4',
label: '龍須面',
},
{
value: '選項(xiàng)5',
label: '北京烤鴨',
},
],
value: '',
}
},
}
</script>
選擇器不可用狀態(tài)
為el-select設(shè)置disabled屬性,則整個(gè)選擇器不可用
<template>
<el-select v-model="value" disabled placeholder="請(qǐng)選擇">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
<script>
export default {
data() {
return {
options: [
{
value: '選項(xiàng)1',
label: '黃金糕',
},
{
value: '選項(xiàng)2',
label: '雙皮奶',
},
{
value: '選項(xiàng)3',
label: '蚵仔煎',
},
{
value: '選項(xiàng)4',
label: '龍須面',
},
{
value: '選項(xiàng)5',
label: '北京烤鴨',
},
],
value: '',
}
},
}
</script>
包含清空按鈕,可將選擇器清空為初始狀態(tài)
為el-select設(shè)置clearable屬性,則可將選擇器清空。需要注意的是,clearable屬性?xún)H適用于單選。
<template>
<el-select v-model="value" clearable placeholder="請(qǐng)選擇">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
<script>
export default {
data() {
return {
options: [
{
value: '選項(xiàng)1',
label: '黃金糕',
},
{
value: '選項(xiàng)2',
label: '雙皮奶',
},
{
value: '選項(xiàng)3',
label: '蚵仔煎',
},
{
value: '選項(xiàng)4',
label: '龍須面',
},
{
value: '選項(xiàng)5',
label: '北京烤鴨',
},
],
value: '',
}
},
}
</script>
適用性較廣的基礎(chǔ)多選,用 Tag 展示已選項(xiàng)
為el-select設(shè)置multiple屬性即可啟用多選,此時(shí)v-model的值為當(dāng)前選中值所組成的數(shù)組。默認(rèn)情況下選中值會(huì)以 Tag 的形式展現(xiàn),你也可以設(shè)置collapse-tags屬性將它們合并為一段文字。
<template>
<el-select v-model="value1" multiple placeholder="請(qǐng)選擇">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<el-select
v-model="value2"
multiple
collapse-tags
style="margin-left: 20px;"
placeholder="請(qǐng)選擇"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
<script>
export default {
data() {
return {
options: [
{
value: '選項(xiàng)1',
label: '黃金糕',
},
{
value: '選項(xiàng)2',
label: '雙皮奶',
},
{
value: '選項(xiàng)3',
label: '蚵仔煎',
},
{
value: '選項(xiàng)4',
label: '龍須面',
},
{
value: '選項(xiàng)5',
label: '北京烤鴨',
},
],
value1: [],
value2: [],
}
},
}
</script>
可以自定義備選項(xiàng)
將自定義的 HTML 模板插入el-option的 slot 中即可。
<template>
<el-select v-model="value" placeholder="請(qǐng)選擇">
<el-option
v-for="item in cities"
:key="item.value"
:label="item.label"
:value="item.value"
>
<span style="float: left">{{ item.label }}</span>
<span
style="float: right; color: var(--el-text-color-secondary); font-size: 13px"
>{{ item.value }}</span
>
</el-option>
</el-select>
</template>
<script>
export default {
data() {
return {
cities: [
{
value: 'Beijing',
label: '北京',
},
{
value: 'Shanghai',
label: '上海',
},
{
value: 'Nanjing',
label: '南京',
},
{
value: 'Chengdu',
label: '成都',
},
{
value: 'Shenzhen',
label: '深圳',
},
{
value: 'Guangzhou',
label: '廣州',
},
],
value: '',
}
},
}
</script>
備選項(xiàng)進(jìn)行分組展示
使用?
el-option-group
?對(duì)備選項(xiàng)進(jìn)行分組,它的?label
?屬性為分組名
<template>
<el-select v-model="value" placeholder="請(qǐng)選擇">
<el-option-group
v-for="group in options"
:key="group.label"
:label="group.label"
>
<el-option
v-for="item in group.options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-option-group>
</el-select>
</template>
<script>
export default {
data() {
return {
options: [
{
label: '熱門(mén)城市',
options: [
{
value: 'Shanghai',
label: '上海',
},
{
value: 'Beijing',
label: '北京',
},
],
},
{
label: '城市名',
options: [
{
value: 'Chengdu',
label: '成都',
},
{
value: 'Shenzhen',
label: '深圳',
},
{
value: 'Guangzhou',
label: '廣州',
},
{
value: 'Dalian',
label: '大連',
},
],
},
],
value: '',
}
},
}
</script>
可以利用搜索功能快速查找選項(xiàng)
為el-select添加filterable屬性即可啟用搜索功能。默認(rèn)情況下,Select 會(huì)找出所有l(wèi)abel屬性包含輸入值的選項(xiàng)。如果希望使用其他的搜索邏輯,可以通過(guò)傳入一個(gè)filter-method來(lái)實(shí)現(xiàn)。filter-method為一個(gè)Function,它會(huì)在輸入值發(fā)生變化時(shí)調(diào)用,參數(shù)為當(dāng)前輸入值。
<template>
<el-select v-model="value" filterable placeholder="請(qǐng)選擇">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
<script>
export default {
data() {
return {
options: [
{
value: '選項(xiàng)1',
label: '黃金糕',
},
{
value: '選項(xiàng)2',
label: '雙皮奶',
},
{
value: '選項(xiàng)3',
label: '蚵仔煎',
},
{
value: '選項(xiàng)4',
label: '龍須面',
},
{
value: '選項(xiàng)5',
label: '北京烤鴨',
},
],
value: '',
}
},
}
</script>
從服務(wù)器搜索數(shù)據(jù),輸入關(guān)鍵字進(jìn)行查找
為了啟用遠(yuǎn)程搜索,需要將filterable和remote設(shè)置為true,同時(shí)傳入一個(gè)remote-method。remote-method為一個(gè)Function,它會(huì)在輸入值發(fā)生變化時(shí)調(diào)用,參數(shù)為當(dāng)前輸入值。需要注意的是,如果el-option是通過(guò)v-for指令渲染出來(lái)的,此時(shí)需要為el-option添加key屬性,且其值需具有唯一性,比如此例中的item.value。
<template>
<el-select
v-model="value"
multiple
filterable
remote
reserve-keyword
placeholder="請(qǐng)輸入關(guān)鍵詞"
:remote-method="remoteMethod"
:loading="loading"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
<script>
export default {
data() {
return {
options: [],
value: [],
list: [],
loading: false,
states: [
'Alabama',
'Alaska',
'Arizona',
'Arkansas',
'California',
'Colorado',
'Connecticut',
'Delaware',
'Florida',
'Georgia',
'Hawaii',
'Idaho',
'Illinois',
'Indiana',
'Iowa',
'Kansas',
'Kentucky',
'Louisiana',
'Maine',
'Maryland',
'Massachusetts',
'Michigan',
'Minnesota',
'Mississippi',
'Missouri',
'Montana',
'Nebraska',
'Nevada',
'New Hampshire',
'New Jersey',
'New Mexico',
'New York',
'North Carolina',
'North Dakota',
'Ohio',
'Oklahoma',
'Oregon',
'Pennsylvania',
'Rhode Island',
'South Carolina',
'South Dakota',
'Tennessee',
'Texas',
'Utah',
'Vermont',
'Virginia',
'Washington',
'West Virginia',
'Wisconsin',
'Wyoming',
],
}
},
mounted() {
this.list = this.states.map((item) => {
return { value: `value:${item}`, label: `label:${item}` }
})
},
methods: {
remoteMethod(query) {
if (query !== '') {
this.loading = true
setTimeout(() => {
this.loading = false
this.options = this.list.filter((item) => {
return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1
})
}, 200)
} else {
this.options = []
}
},
},
}
</script>
可以創(chuàng)建并選中選項(xiàng)中不存在的條目
使用allow-create屬性即可通過(guò)在輸入框中輸入文字來(lái)創(chuàng)建新的條目。注意此時(shí)filterable必須為真。本例還使用了default-first-option屬性,在該屬性打開(kāi)的情況下,按下回車(chē)就可以選中當(dāng)前選項(xiàng)列表中的第一個(gè)選項(xiàng),無(wú)需使用鼠標(biāo)或鍵盤(pán)方向鍵進(jìn)行定位。
<template>
<el-select
v-model="value"
multiple
filterable
allow-create
default-first-option
placeholder="請(qǐng)選擇文章標(biāo)簽"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
<script>
export default {
data() {
return {
options: [
{
value: 'HTML',
label: 'HTML',
},
{
value: 'CSS',
label: 'CSS',
},
{
value: 'JavaScript',
label: 'JavaScript',
},
],
value: [],
}
},
}
</script>
如果 Select 的綁定值為對(duì)象類(lèi)型,請(qǐng)務(wù)必指定 value-key 作為它的唯一性標(biāo)識(shí)。
參數(shù) | 說(shuō)明 | 類(lèi)型 | 可選值 | 默認(rèn)值 |
---|---|---|---|---|
model-value / v-model | 綁定值 | string / number / boolean / object | — | — |
multiple | 是否多選 | boolean | — | false |
disabled | 是否禁用 | boolean | — | false |
value-key | 作為 value 唯一標(biāo)識(shí)的鍵名,綁定值為對(duì)象類(lèi)型時(shí)必填 | string | — | value |
size | 輸入框尺寸 | string | medium/small/mini | — |
clearable | 是否可以清空選項(xiàng) | boolean | — | false |
collapse-tags | 多選時(shí)是否將選中值按文字的形式展示 | boolean | — | false |
multiple-limit | 多選時(shí)用戶(hù)最多可以選擇的項(xiàng)目數(shù),為 0 則不限制 | number | — | 0 |
name | select input 的 name 屬性 | string | — | — |
autocomplete | select input 的 autocomplete 屬性 | string | — | off |
placeholder | 占位符 | string | — | 請(qǐng)選擇 |
filterable | 是否可搜索 | boolean | — | false |
allow-create | 是否允許用戶(hù)創(chuàng)建新條目,需配合 filterable 使用 | boolean | — | false |
filter-method | 自定義搜索方法 | function | — | — |
remote | 是否為遠(yuǎn)程搜索 | boolean | — | false |
remote-method | 遠(yuǎn)程搜索方法 | function | — | — |
loading | 是否正在從遠(yuǎn)程獲取數(shù)據(jù) | boolean | — | false |
loading-text | 遠(yuǎn)程加載時(shí)顯示的文字 | string | — | 加載中 |
no-match-text | 搜索條件無(wú)匹配時(shí)顯示的文字,也可以使用#empty 設(shè)置 | string | — | 無(wú)匹配數(shù)據(jù) |
no-data-text | 選項(xiàng)為空時(shí)顯示的文字,也可以使用#empty 設(shè)置 | string | — | 無(wú)數(shù)據(jù) |
popper-class | Select 下拉框的類(lèi)名 | string | — | — |
reserve-keyword | 多選且可搜索時(shí),是否在選中一個(gè)選項(xiàng)后保留當(dāng)前的搜索關(guān)鍵詞 | boolean | — | false |
default-first-option | 在輸入框按下回車(chē),選擇第一個(gè)匹配項(xiàng)。需配合 filterable 或 remote 使用 | boolean | - | false |
popper-append-to-body | 是否將彈出框插入至 body 元素。在彈出框的定位出現(xiàn)問(wèn)題時(shí),可將該屬性設(shè)置為 false | boolean | - | true |
automatic-dropdown | 對(duì)于不可搜索的 Select,是否在輸入框獲得焦點(diǎn)后自動(dòng)彈出選項(xiàng)菜單 | boolean | - | false |
clear-icon | 自定義清空?qǐng)D標(biāo)的類(lèi)名 | string | — | el-icon-circle-close |
事件名稱(chēng) | 說(shuō)明 | 回調(diào)參數(shù) |
---|---|---|
change | 選中值發(fā)生變化時(shí)觸發(fā) | 目前的選中值 |
visible-change | 下拉框出現(xiàn)/隱藏時(shí)觸發(fā) | 出現(xiàn)則為 true,隱藏則為 false |
remove-tag | 多選模式下移除 tag 時(shí)觸發(fā) | 移除的 tag 值 |
clear | 可清空的單選模式下用戶(hù)點(diǎn)擊清空按鈕時(shí)觸發(fā) | — |
blur | 當(dāng) input 失去焦點(diǎn)時(shí)觸發(fā) | (event: Event) |
focus | 當(dāng) input 獲得焦點(diǎn)時(shí)觸發(fā) | (event: Event) |
name | 說(shuō)明 |
---|---|
— | Option 組件列表 |
prefix | Select 組件頭部?jī)?nèi)容 |
empty | 無(wú)選項(xiàng)時(shí)的列表 |
參數(shù) | 說(shuō)明 | 類(lèi)型 | 可選值 | 默認(rèn)值 |
---|---|---|---|---|
value | 選項(xiàng)的值 | string / number / boolean / object | — | — |
label | 選項(xiàng)的標(biāo)簽,若不設(shè)置則默認(rèn)與 value 相同 | string/number | — | — |
disabled | 是否禁用該選項(xiàng) | boolean | — | false |
方法名 | 說(shuō)明 | 參數(shù) |
---|---|---|
focus | 使 input 獲取焦點(diǎn) | - |
blur | 使 input 失去焦點(diǎn),并隱藏下拉框 | - |
更多建議: