Skip to content

Select 选择器

当选项过多时,使用下拉菜单展示并选择内容。

基础用法

适用广泛的基础单选 v-model 的值为当前被选中的 options 的 value 属性值

<script lang="ts" setup>
import { ref } from 'vue'
import type { SelectOption } from '@/components/Select/types'

import SiSelect from '@/components/Select/Select.vue'

const selectoptions: SelectOption [] = [
  { value: '1', label: 'Action 1' },
  { value: '2', label: 'Action 2' },
  { value: '3', label: 'Action 3' },
  { value: '4', label: 'Action 4' },
]
const Selectvalue = ref('')
</script>

<template>
  <div>
    <SiSelect v-model="Selectvalue" :options="selectoptions" placeholder="请选择" />
  </div>
</template>

有禁用选项

在 options 中,设定 disabled 值为 true,即可禁用该选项

<script lang="ts" setup>
import { ref } from 'vue'
import type { SelectOption } from '@/components/Select/types'

import SiSelect from '@/components/Select/Select.vue'

const selectoptions: SelectOption [] = [
  { value: '1', label: 'Action 1' },
  { value: '2', label: 'Action 2', disabled: true },
  { value: '3', label: 'Action 3' },
  { value: '4', label: 'Action 4' },
]
const Selectvalue = ref('')
</script>

<template>
  <div>
    <SiSelect v-model="Selectvalue" :options="selectoptions" placeholder="请选择" />
  </div>
</template>

禁用状态

禁用整个选择器组件

为 SiSelect 设置 disabled属性,则整个选择器不可用。

<script lang="ts" setup>
import { ref } from 'vue'
import type { SelectOption } from '@/components/Select/types'

import SiSelect from '@/components/Select/Select.vue'

const selectoptions: SelectOption [] = [
  { value: '1', label: 'Action 1' },
  { value: '2', label: 'Action 2' },
  { value: '3', label: 'Action 3', disabled: true },
  { value: '4', label: 'Action 4' },
]
const Selectvalue = ref('')
</script>

<template>
  <div>
    <SiSelect
      v-model="Selectvalue"
      :options="selectoptions"
      placeholder="请选择"
      disabled
    />
  </div>
</template>

可清空单选

您可以使用清除图标来清除选择。

为 SiSelect 设置 clearable 属性,则可将选择器清空

<script lang="ts" setup>
import { ref } from 'vue'
import type { SelectOption } from '@/components/Select/types'

import SiSelect from '@/components/Select/Select.vue'

const selectoptions: SelectOption [] = [
  { value: '1', label: 'Action 1' },
  { value: '2', label: 'Action 2' },
  { value: '3', label: 'Action 3' },
  { value: '4', label: 'Action 4' },
]
const Selectvalue = ref('')
</script>

<template>
  <div>
    <SiSelect
      v-model="Selectvalue"
      :options="selectoptions"
      placeholder="请选择"
      clearable
    />
  </div>
</template>

筛选选项

可以利用筛选功能快速查找选项。

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

<script setup lang="ts">
import { ref } from 'vue'
import SiSelect from '@/components/Select/Select.vue'

const test = ref('')
const options = [
  {
    value: 'Option1',
    label: 'Option1',
  },
  {
    value: 'Option2',
    label: 'Option2',
  },
  {
    value: 'Option3',
    label: 'Option3',
  },
  {
    value: 'Option4',
    label: 'Option4',
  },
  {
    value: 'Option5',
    label: 'Option5',
  },
]
</script>

<template>
  <SiSelect
    v-model="test"
    placeholder="可过滤 基础选择器"
    :options="options"
    filterable
  />
</template>

远程搜索

输入关键字以从远程服务器中查找数据。

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

<script setup lang="ts">
import { ref } from 'vue'
import SiSelect from '@/components/Select/Select.vue'

const test = ref('')
const states = [
  'Alsad',
  'Alabama',
  'Alaska',
  'Arizona',
  'Arkansas',
  'California',
  'Colorado',
  'Connecticut',
  'Delaware',
  'Florida',
  'Georgia',
  'Hawaii',
  'Idaho',
  'Illinois',
  'Indiana',
  'Iowa',
  'Kansas',
  'Kentucky',
  'Louisiana',
  'Maine',
]

function remoteFilter(query: any) {
  return new Promise((resolve) => {
    if (query) {
      setTimeout(() => {
        const options = states
          .filter((item) => {
            return item.toLowerCase().includes(query.toLowerCase())
          })
          .map((label) => {
            return { label, value: label }
          })
        resolve(options)
      }, 500)
    } else {
      resolve([])
    }
  })
}

</script>

<template>
  <SiSelect
    v-model="test"
    placeholder="搜索远程结果"
    filterable
    remote
    :remote-method="remoteFilter"
  />
</template>

Select API

Select Attributes

属性名说明类型Default
model-value / v-model选中项绑定值string
placeholder占位符,默认为“请选择”string
disabled是否禁用booleanfalse
renderLabel自定义模板VNode
remote其中的选项是否从服务器远程加载booleanfalse
clearable是否可以清空选项booleanfalse
filter-method自定义筛选方法Function
size输入框尺寸string

Select Events

事件名说明Type
change选中值发生变化时触发Function
visible-change下拉框出现/隐藏时触发Function
clear可清空的单选模式下用户点击清空按钮时触发Function

基于 MIT 许可发布