Select 選擇器
當選項過多時,使用下拉菜單展示並選擇內容。
基礎用法
適用廣泛的基礎單選
v-model
的值為當前被選中的el-option
的 value 屬性值

1 <template> 2 <el-select v-model="value" placeholder="請選擇"> 3 <el-option 4 v-for="item in options" 5 :key="item.value" 6 :label="item.label" 7 :value="item.value"> 8 </el-option> 9 </el-select> 10 </template> 11 12 <script> 13 export default { 14 data() { 15 return { 16 options: [{ 17 value: '選項1', 18 label: '黃金糕' 19 }, { 20 value: '選項2', 21 label: '雙皮奶' 22 }, { 23 value: '選項3', 24 label: '蚵仔煎' 25 }, { 26 value: '選項4', 27 label: '龍須面' 28 }, { 29 value: '選項5', 30 label: '北京烤鴨' 31 }], 32 value: '' 33 } 34 } 35 } 36 </script>
有禁用選項
在el-option
中,設定disabled
值為 true,即可禁用該選項

1 <template> 2 <el-select v-model="value2" placeholder="請選擇"> 3 <el-option 4 v-for="item in options2" 5 :key="item.value" 6 :label="item.label" 7 :value="item.value" 8 :disabled="item.disabled"> 9 </el-option> 10 </el-select> 11 </template> 12 13 <script> 14 export default { 15 data() { 16 return { 17 options2: [{ 18 value: '選項1', 19 label: '黃金糕' 20 }, { 21 value: '選項2', 22 label: '雙皮奶', 23 disabled: true 24 }, { 25 value: '選項3', 26 label: '蚵仔煎' 27 }, { 28 value: '選項4', 29 label: '龍須面' 30 }, { 31 value: '選項5', 32 label: '北京烤鴨' 33 }], 34 value2: '' 35 } 36 } 37 } 38 </script>
禁用狀態
選擇器不可用狀態
為el-select
設置disabled
屬性,則整個選擇器不可用

1 <template> 2 <el-select v-model="value3" disabled placeholder="請選擇"> 3 <el-option 4 v-for="item in options" 5 :key="item.value" 6 :label="item.label" 7 :value="item.value"> 8 </el-option> 9 </el-select> 10 </template> 11 12 <script> 13 export default { 14 data() { 15 return { 16 options: [{ 17 value: '選項1', 18 label: '黃金糕' 19 }, { 20 value: '選項2', 21 label: '雙皮奶' 22 }, { 23 value: '選項3', 24 label: '蚵仔煎' 25 }, { 26 value: '選項4', 27 label: '龍須面' 28 }, { 29 value: '選項5', 30 label: '北京烤鴨' 31 }], 32 value3: '' 33 } 34 } 35 } 36 </script>
可清空單選
包含清空按鈕,可將選擇器清空為初始狀態
為el-select
設置clearable
屬性,則可將選擇器清空。需要注意的是,clearable
屬性僅適用於單選。

1 <template> 2 <el-select v-model="value4" clearable placeholder="請選擇"> 3 <el-option 4 v-for="item in options" 5 :key="item.value" 6 :label="item.label" 7 :value="item.value"> 8 </el-option> 9 </el-select> 10 </template> 11 12 <script> 13 export default { 14 data() { 15 return { 16 options: [{ 17 value: '選項1', 18 label: '黃金糕' 19 }, { 20 value: '選項2', 21 label: '雙皮奶' 22 }, { 23 value: '選項3', 24 label: '蚵仔煎' 25 }, { 26 value: '選項4', 27 label: '龍須面' 28 }, { 29 value: '選項5', 30 label: '北京烤鴨' 31 }], 32 value4: '' 33 } 34 } 35 } 36 </script>
基礎多選
適用性較廣的基礎多選,用 Tag 展示已選項
為el-select
設置multiple
屬性即可啟用多選,此時v-model
的值為當前選中值所組成的數組。默認情況下選中值會以 Tag 的形式展現,你也可以設置collapse-tags
屬性將它們合並為一段文字。

1 <template> 2 <el-select v-model="value5" multiple placeholder="請選擇"> 3 <el-option 4 v-for="item in options" 5 :key="item.value" 6 :label="item.label" 7 :value="item.value"> 8 </el-option> 9 </el-select> 10 11 <el-select 12 v-model="value11" 13 multiple 14 collapse-tags 15 style="margin-left: 20px;" 16 placeholder="請選擇"> 17 <el-option 18 v-for="item in options" 19 :key="item.value" 20 :label="item.label" 21 :value="item.value"> 22 </el-option> 23 </el-select> 24 </template> 25 26 <script> 27 export default { 28 data() { 29 return { 30 options: [{ 31 value: '選項1', 32 label: '黃金糕' 33 }, { 34 value: '選項2', 35 label: '雙皮奶' 36 }, { 37 value: '選項3', 38 label: '蚵仔煎' 39 }, { 40 value: '選項4', 41 label: '龍須面' 42 }, { 43 value: '選項5', 44 label: '北京烤鴨' 45 }], 46 value5: [], 47 value11: [] 48 } 49 } 50 } 51 </script>
自定義模板
可以自定義備選項
將自定義的 HTML 模板插入el-option
的 slot 中即可。
<template> <el-select v-model="value6" placeholder="請選擇"> <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: #8492a6; 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: '廣州' }], value6: '' } } } </script>
分組
備選項進行分組展示
使用el-option-group
對備選項進行分組,它的label
屬性為分組名

1 <template> 2 <el-select v-model="value7" placeholder="請選擇"> 3 <el-option-group 4 v-for="group in options3" 5 :key="group.label" 6 :label="group.label"> 7 <el-option 8 v-for="item in group.options" 9 :key="item.value" 10 :label="item.label" 11 :value="item.value"> 12 </el-option> 13 </el-option-group> 14 </el-select> 15 </template> 16 17 <script> 18 export default { 19 data() { 20 return { 21 options3: [{ 22 label: '熱門城市', 23 options: [{ 24 value: 'Shanghai', 25 label: '上海' 26 }, { 27 value: 'Beijing', 28 label: '北京' 29 }] 30 }, { 31 label: '城市名', 32 options: [{ 33 value: 'Chengdu', 34 label: '成都' 35 }, { 36 value: 'Shenzhen', 37 label: '深圳' 38 }, { 39 value: 'Guangzhou', 40 label: '廣州' 41 }, { 42 value: 'Dalian', 43 label: '大連' 44 }] 45 }], 46 value7: '' 47 } 48 } 49 } 50 </script>
可搜索
可以利用搜索功能快速查找選項
為el-select
添加filterable
屬性即可啟用搜索功能。默認情況下,Select 會找出所有label
屬性包含輸入值的選項。如果希望使用其他的搜索邏輯,可以通過傳入一個filter-method
來實現。filter-method
為一個Function
,它會在輸入值發生變化時調用,參數為當前輸入值。

1 <template> 2 <el-select v-model="value8" filterable placeholder="請選擇"> 3 <el-option 4 v-for="item in options" 5 :key="item.value" 6 :label="item.label" 7 :value="item.value"> 8 </el-option> 9 </el-select> 10 </template> 11 12 <script> 13 export default { 14 data() { 15 return { 16 options: [{ 17 value: '選項1', 18 label: '黃金糕' 19 }, { 20 value: '選項2', 21 label: '雙皮奶' 22 }, { 23 value: '選項3', 24 label: '蚵仔煎' 25 }, { 26 value: '選項4', 27 label: '龍須面' 28 }, { 29 value: '選項5', 30 label: '北京烤鴨' 31 }], 32 value8: '' 33 } 34 } 35 } 36 </script>
遠程搜索
從服務器搜索數據,輸入關鍵字進行查找
為了啟用遠程搜索,需要將filterable
和remote
設置為true
,同時傳入一個remote-method
。remote-method
為一個Function
,它會在輸入值發生變化時調用,參數為當前輸入值。需要注意的是,如果el-option
是通過v-for
指令渲染出來的,此時需要為el-option
添加key
屬性,且其值需具有唯一性,比如此例中的item.value
。

1 <template> 2 <el-select 3 v-model="value9" 4 multiple 5 filterable 6 remote 7 reserve-keyword 8 placeholder="請輸入關鍵詞" 9 :remote-method="remoteMethod" 10 :loading="loading"> 11 <el-option 12 v-for="item in options4" 13 :key="item.value" 14 :label="item.label" 15 :value="item.value"> 16 </el-option> 17 </el-select> 18 </template> 19 20 <script> 21 export default { 22 data() { 23 return { 24 options4: [], 25 value9: [], 26 list: [], 27 loading: false, 28 states: ["Alabama", "Alaska", "Arizona", 29 "Arkansas", "California", "Colorado", 30 "Connecticut", "Delaware", "Florida", 31 "Georgia", "Hawaii", "Idaho", "Illinois", 32 "Indiana", "Iowa", "Kansas", "Kentucky", 33 "Louisiana", "Maine", "Maryland", 34 "Massachusetts", "Michigan", "Minnesota", 35 "Mississippi", "Missouri", "Montana", 36 "Nebraska", "Nevada", "New Hampshire", 37 "New Jersey", "New Mexico", "New York", 38 "North Carolina", "North Dakota", "Ohio", 39 "Oklahoma", "Oregon", "Pennsylvania", 40 "Rhode Island", "South Carolina", 41 "South Dakota", "Tennessee", "Texas", 42 "Utah", "Vermont", "Virginia", 43 "Washington", "West Virginia", "Wisconsin", 44 "Wyoming"] 45 } 46 }, 47 mounted() { 48 this.list = this.states.map(item => { 49 return { value: item, label: item }; 50 }); 51 }, 52 methods: { 53 remoteMethod(query) { 54 if (query !== '') { 55 this.loading = true; 56 setTimeout(() => { 57 this.loading = false; 58 this.options4 = this.list.filter(item => { 59 return item.label.toLowerCase() 60 .indexOf(query.toLowerCase()) > -1; 61 }); 62 }, 200); 63 } else { 64 this.options4 = []; 65 } 66 } 67 } 68 } 69 </script>
創建條目
可以創建並選中選項中不存在的條目
使用allow-create
屬性即可通過在輸入框中輸入文字來創建新的條目。
注意此時filterable
必須為真。
本例還使用了default-first-option
屬性,在該屬性打開的情況下,按下回車就可以選中當前選項列表中的第一個選項,無需使用鼠標或鍵盤方向鍵進行定位。

1 <template> 2 <el-select 3 v-model="value10" 4 multiple 5 filterable 6 allow-create 7 default-first-option 8 placeholder="請選擇文章標簽"> 9 <el-option 10 v-for="item in options5" 11 :key="item.value" 12 :label="item.label" 13 :value="item.value"> 14 </el-option> 15 </el-select> 16 </template> 17 18 <script> 19 export default { 20 data() { 21 return { 22 options5: [{ 23 value: 'HTML', 24 label: 'HTML' 25 }, { 26 value: 'CSS', 27 label: 'CSS' 28 }, { 29 value: 'JavaScript', 30 label: 'JavaScript' 31 }], 32 value10: [] 33 } 34 } 35 } 36 </script>
如果 Select 的綁定值為對象類型,請務必指定 value-key
作為它的唯一性標識。
Select Attributes
參數 | 說明 | 類型 | 可選值 | 默認值 |
---|---|---|---|---|
multiple | 是否多選 | boolean | — | false |
disabled | 是否禁用 | boolean | — | false |
value-key | 作為 value 唯一標識的鍵名,綁定值為對象類型時必填 | string | — | value |
size | 輸入框尺寸 | string | medium/small/mini | — |
clearable | 單選時是否可以清空選項 | boolean | — | false |
collapse-tags | 多選時是否將選中值按文字的形式展示 | boolean | — | false |
multiple-limit | 多選時用戶最多可以選擇的項目數,為 0 則不限制 | number | — | 0 |
name | select input 的 name 屬性 | string | — | — |
auto-complete | select input 的 autocomplete 屬性 | string | — | off |
placeholder | 占位符 | string | — | 請選擇 |
filterable | 是否可搜索 | boolean | — | false |
allow-create | 是否允許用戶創建新條目,需配合 filterable 使用 |
boolean | — | false |
filter-method | 自定義搜索方法 | function | — | — |
remote | 是否為遠程搜索 | boolean | — | false |
remote-method | 遠程搜索方法 | function | — | — |
loading | 是否正在從遠程獲取數據 | boolean | — | false |
loading-text | 遠程加載時顯示的文字 | string | — | 加載中 |
no-match-text | 搜索條件無匹配時顯示的文字 | string | — | 無匹配數據 |
no-data-text | 選項為空時顯示的文字 | string | — | 無數據 |
popper-class | Select 下拉框的類名 | string | — | — |
reserve-keyword | 多選且可搜索時,是否在選中一個選項后保留當前的搜索關鍵詞 | boolean | — | false |
default-first-option | 在輸入框按下回車,選擇第一個匹配項。需配合 filterable 或 remote 使用 |
boolean | - | false |
popper-append-to-body | 是否將彈出框插入至 body 元素。在彈出框的定位出現問題時,可將該屬性設置為 false | boolean | - | true |
Select Events
事件名稱 | 說明 | 回調參數 |
---|---|---|
change | 選中值發生變化時觸發 | 目前的選中值 |
visible-change | 下拉框出現/隱藏時觸發 | 出現則為 true,隱藏則為 false |
remove-tag | 多選模式下移除tag時觸發 | 移除的tag值 |
clear | 可清空的單選模式下用戶點擊清空按鈕時觸發 | — |
blur | 當 input 失去焦點時觸發 | (event: Event) |
focus | 當 input 獲得焦點時觸發 | (event: Event) |
Option Group Attributes
參數 | 說明 | 類型 | 可選值 | 默認值 |
---|---|---|---|---|
label | 分組的組名 | string | — | — |
disabled | 是否將該分組下所有選項置為禁用 | boolean | — | false |
Option Attributes
參數 | 說明 | 類型 | 可選值 | 默認值 |
---|---|---|---|---|
value | 選項的值 | string/number/object | — | — |
label | 選項的標簽,若不設置則默認與 value 相同 |
string/number | — | — |
disabled | 是否禁用該選項 | boolean | — | false |
Methods
方法名 | 說明 | 參數 |
---|---|---|
focus | 使 input 獲取焦點 | - |