适用广泛的基础单选

    的值为当前被选中的el-option的 value 属性值

    有禁用选项

    Select 选择器 - 图1

    el-option中,设定disabled值为 true,即可禁用该选项

    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. :disabled="item.disabled">
    9. </el-option>
    10. </el-select>
    11. </template>
    12. <script>
    13. export default {
    14. data() {
    15. return {
    16. options: [{
    17. value: '选项1',
    18. label: '黄金糕'
    19. }, {
    20. value: '选项2',
    21. label: '双皮奶',
    22. disabled: true
    23. }, {
    24. value: '选项3',
    25. label: '蚵仔煎'
    26. }, {
    27. value: '选项4',
    28. label: '龙须面'
    29. }, {
    30. value: '选项5',
    31. label: '北京烤鸭'
    32. }],
    33. value: ''
    34. }
    35. }
    36. }
    37. </script>

    禁用状态

    选择器不可用状态

    el-select设置disabled属性,则整个选择器不可用

    1. <template>
    2. <el-select v-model="value" 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. <script>
    12. export default {
    13. data() {
    14. return {
    15. options: [{
    16. value: '选项1',
    17. label: '黄金糕'
    18. }, {
    19. value: '选项2',
    20. label: '双皮奶'
    21. }, {
    22. value: '选项3',
    23. label: '蚵仔煎'
    24. }, {
    25. value: '选项4',
    26. label: '龙须面'
    27. }, {
    28. value: '选项5',
    29. label: '北京烤鸭'
    30. }],
    31. value: ''
    32. }
    33. }
    34. }
    35. </script>

    可清空单选

    包含清空按钮,可将选择器清空为初始状态

    el-select设置clearable属性,则可将选择器清空。需要注意的是,clearable属性仅适用于单选。

    基础多选

    适用性较广的基础多选,用 Tag 展示已选项

    Select 选择器 - 图2

    el-select设置multiple属性即可启用多选,此时v-model的值为当前选中值所组成的数组。默认情况下选中值会以 Tag 的形式展现,你也可以设置collapse-tags属性将它们合并为一段文字。

    1. <template>
    2. <el-select v-model="value1" multiple placeholder="请选择">
    3. <el-option
    4. v-for="item in options"
    5. :key="item.value"
    6. :value="item.value">
    7. </el-option>
    8. </el-select>
    9. <el-select
    10. v-model="value2"
    11. multiple
    12. collapse-tags
    13. style="margin-left: 20px;"
    14. placeholder="请选择">
    15. <el-option
    16. :key="item.value"
    17. :label="item.label"
    18. :value="item.value">
    19. </el-option>
    20. </el-select>
    21. </template>
    22. <script>
    23. export default {
    24. data() {
    25. return {
    26. options: [{
    27. value: '选项1',
    28. label: '黄金糕'
    29. }, {
    30. value: '选项2',
    31. label: '双皮奶'
    32. }, {
    33. value: '选项3',
    34. label: '蚵仔煎'
    35. }, {
    36. value: '选项4',
    37. label: '龙须面'
    38. }, {
    39. value: '选项5',
    40. label: '北京烤鸭'
    41. }],
    42. value1: [],
    43. value2: []
    44. }
    45. }
    46. }
    47. </script>

    可以自定义备选项

    将自定义的 HTML 模板插入el-option的 slot 中即可。

    1. <template>
    2. <el-select v-model="value" placeholder="请选择">
    3. <el-option
    4. v-for="item in cities"
    5. :key="item.value"
    6. :label="item.label"
    7. :value="item.value">
    8. <span style="float: left">{{ item.label }}</span>
    9. <span style="float: right; color: #8492a6; font-size: 13px">{{ item.value }}</span>
    10. </el-option>
    11. </el-select>
    12. </template>
    13. <script>
    14. export default {
    15. data() {
    16. return {
    17. cities: [{
    18. value: 'Beijing',
    19. label: '北京'
    20. }, {
    21. value: 'Shanghai',
    22. label: '上海'
    23. }, {
    24. value: 'Nanjing',
    25. label: '南京'
    26. }, {
    27. value: 'Chengdu',
    28. label: '成都'
    29. }, {
    30. value: 'Shenzhen',
    31. label: '深圳'
    32. }, {
    33. value: 'Guangzhou',
    34. label: '广州'
    35. }],
    36. value: ''
    37. }
    38. }
    39. }
    40. </script>

    分组

    备选项进行分组展示

    Select 选择器 - 图3

    可搜索

    可以利用搜索功能快速查找选项

    el-select添加filterable属性即可启用搜索功能。默认情况下,Select 会找出所有label属性包含输入值的选项。如果希望使用其他的搜索逻辑,可以通过传入一个filter-method来实现。filter-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。

    1. <template>
    2. <el-select v-model="value" 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. <script>
    11. export default {
    12. data() {
    13. return {
    14. options: [{
    15. value: '选项1',
    16. label: '黄金糕'
    17. }, {
    18. value: '选项2',
    19. }, {
    20. value: '选项3',
    21. label: '蚵仔煎'
    22. }, {
    23. value: '选项4',
    24. label: '龙须面'
    25. }, {
    26. value: '选项5',
    27. label: '北京烤鸭'
    28. }],
    29. value: ''
    30. }
    31. }
    32. }
    33. </script>

    远程搜索

    从服务器搜索数据,输入关键字进行查找

    Select 选择器 - 图4

    为了启用远程搜索,需要将filterableremote设置为true,同时传入一个remote-methodremote-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。需要注意的是,如果el-option是通过v-for指令渲染出来的,此时需要为el-option添加key属性,且其值需具有唯一性,比如此例中的item.value

    1. <template>
    2. <el-select
    3. v-model="value"
    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 options"
    13. :key="item.value"
    14. :label="item.label"
    15. :value="item.value">
    16. </el-option>
    17. </el-select>
    18. </template>
    19. <script>
    20. export default {
    21. data() {
    22. return {
    23. options: [],
    24. value: [],
    25. list: [],
    26. loading: false,
    27. states: ["Alabama", "Alaska", "Arizona",
    28. "Arkansas", "California", "Colorado",
    29. "Connecticut", "Delaware", "Florida",
    30. "Georgia", "Hawaii", "Idaho", "Illinois",
    31. "Indiana", "Iowa", "Kansas", "Kentucky",
    32. "Louisiana", "Maine", "Maryland",
    33. "Massachusetts", "Michigan", "Minnesota",
    34. "Mississippi", "Missouri", "Montana",
    35. "Nebraska", "Nevada", "New Hampshire",
    36. "New Jersey", "New Mexico", "New York",
    37. "North Carolina", "North Dakota", "Ohio",
    38. "Oklahoma", "Oregon", "Pennsylvania",
    39. "Rhode Island", "South Carolina",
    40. "South Dakota", "Tennessee", "Texas",
    41. "Utah", "Vermont", "Virginia",
    42. "Washington", "West Virginia", "Wisconsin",
    43. "Wyoming"]
    44. }
    45. },
    46. mounted() {
    47. this.list = this.states.map(item => {
    48. return { value: `value:${item}`, label: `label:${item}` };
    49. });
    50. },
    51. methods: {
    52. remoteMethod(query) {
    53. if (query !== '') {
    54. this.loading = true;
    55. setTimeout(() => {
    56. this.loading = false;
    57. this.options = this.list.filter(item => {
    58. return item.label.toLowerCase()
    59. .indexOf(query.toLowerCase()) > -1;
    60. });
    61. }, 200);
    62. } else {
    63. this.options = [];
    64. }
    65. }
    66. }
    67. }
    68. </script>

    创建条目

    可以创建并选中选项中不存在的条目

    使用allow-create属性即可通过在输入框中输入文字来创建新的条目。注意此时filterable必须为真。本例还使用了default-first-option属性,在该属性打开的情况下,按下回车就可以选中当前选项列表中的第一个选项,无需使用鼠标或键盘方向键进行定位。

    Select Events

    事件名称说明回调参数
    change选中值发生变化时触发目前的选中值
    visible-change下拉框出现/隐藏时触发出现则为 true,隐藏则为 false
    remove-tag多选模式下移除tag时触发移除的tag值
    clear可清空的单选模式下用户点击清空按钮时触发
    blur当 input 失去焦点时触发(event: Event)
    focus当 input 获得焦点时触发(event: Event)

    Select Slots

    Option Group Attributes

    参数说明类型可选值默认值
    label分组的组名string
    disabled是否将该分组下所有选项置为禁用booleanfalse

    Option Attributes

    方法名说明参数
    focus使 input 获取焦点-
    blur使 input 失去焦点,并隐藏下拉框-