Select 选择器
代码演示
基础用法
v-model的值为当前被选中的w-option的 value 属性值。
查看代码 < />
<template>
<w-select v-model="value" placeholder="请选择">
<w-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</w-option>
</w-select>
</template>
<script>
export default {
data () {
return {
options: [
{
value: '选项1',
label: 'Atezolizumab注射液'
}, {
value: '选项2',
label: '马来酸阿法替尼片'
}, {
value: '选项3',
label: '依折麦布阿托伐他汀片'
}, {
value: '选项4',
label: '阿替利珠单抗注射液'
}, {
value: '选项5',
label: '依折麦布阿托伐他汀片'
}
],
value: '选项1'
}
}
}
</script>
禁用选项
在w-option中,设定disabled值为 true,即可禁用该选项。
查看代码 < />
<template>
<w-select v-model="value2" placeholder="请选择">
<w-option
v-for="item in options2"
:key="item.value"
:label="item.label"
:value="item.value"
:disabled="item.disabled">
</w-option>
</w-select>
</template>
<script>
export default {
data () {
return {
options2: [
{
value: '选项1',
label: 'Atezolizumab注射液'
}, {
value: '选项2',
label: '马来酸阿法替尼片',
disabled: true
}, {
value: '选项3',
label: '依折麦布阿托伐他汀片'
}, {
value: '选项4',
label: '阿替利珠单抗注射液'
}, {
value: '选项5',
label: '依折麦布阿托伐他汀片'
}
],
value2: ''
}
}
}
</script>
禁用状态
为w-select设置disabled属性,则整个选择器不可用。
查看代码 < />
<template>
<w-select v-model="value3" disabled placeholder="请选择">
<w-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</w-option>
</w-select>
</template>
<script>
export default {
data () {
return {
options: [
{
value: '选项1',
label: 'Atezolizumab注射液'
}, {
value: '选项2',
label: '马来酸阿法替尼片'
}, {
value: '选项3',
label: '依折麦布阿托伐他汀片'
}, {
value: '选项4',
label: '阿替利珠单抗注射液'
}, {
value: '选项5',
label: '依折麦布阿托伐他汀片'
}
],
value3: ''
}
}
}
</script>
可清空
为w-select设置clearable属性,则可清空单选。
查看代码 < />
<template>
<w-select v-model="value4" clearable placeholder="请选择">
<w-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</w-option>
</w-select>
</template>
<script>
export default {
data () {
return {
options: [
{
value: '选项1',
label: 'Atezolizumab注射液'
}, {
value: '选项2',
label: '马来酸阿法替尼片'
}, {
value: '选项3',
label: '依折麦布阿托伐他汀片'
}, {
value: '选项4',
label: '阿替利珠单抗注射液'
}, {
value: '选项5',
label: '依折麦布阿托伐他汀片'
}
],
value4: ''
}
}
}
</script>
绑定值为对象时
为w-select设置value-key属性
查看代码 < />
<template>
<div class="block">
<w-select
v-model="value1"
placeholder="请选择"
ref="select"
value-key="id"
>
<w-option
:key="item.id"
v-for="item in options"
:label="item.label"
:value="item">
</w-option>
</w-select>
</div>
<div class="block">
<w-select
v-model="value2"
placeholder="请选择"
ref="select"
value-key="id"
multiple
>
<w-option
:key="item.id"
v-for="item in options"
:label="item.label"
:value="item">
</w-option>
</w-select>
</div>
</template>
<script>
export default {
data () {
return {
options: [
{
id: '选项1',
label: 'Atezolizumab注射液'
}, {
id: '选项2',
label: '马来酸阿法替尼片'
}, {
id: '选项3',
label: '依折麦布阿托伐他汀片'
}, {
id: '选项4',
label: '阿替利珠单抗注射液'
}, {
id: '选项5',
label: '依折麦布阿托伐他汀片'
}
],
value1: {
id: '选项1',
label: 'Atezolizumab注射液'
},
value2: [{
id: '选项1',
label: 'Atezolizumab注射液'
}]
}
},
watch: {
value1:function (value) {
console.log(value, 'test value');
},
value2:function (value) {
console.log(value, 'test value');
}
}
}
</script>
基础多选
为w-select设置multiple属性,适用性较广的基础多选,用 Tag 展示已选项你也可以设置collapse-tags属性将它们合并为一段文字。
查看代码 < />
<template>
<div class="block">
<w-select
v-model="value5"
multiple
collapse-tags
placeholder="请选择">
<w-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</w-option>
</w-select>
</div>
<div class="block">
<w-select
v-model="value11"
multiple
placeholder="请选择"
>
<w-option
v-for="item in options"
:label="item.label"
:key="item.value"
:value="item">
</w-option>
</w-select>
</div>
</template>
<script>
export default {
data () {
return {
options: [
{
value: '选项1',
label: 'Atezolizumab注射液'
}, {
value: '选项2',
label: '马来酸阿法替尼片'
}, {
value: '选项3',
label: '依折麦布阿托伐他汀片'
}, {
value: '选项4',
label: '阿替利珠单抗注射液'
}, {
value: '选项5',
label: '依折麦布阿托伐他汀片'
}
],
value5: [],
value11: []
}
},
watch: {
value5:function (value) {
console.log(value, 'test value');
},
value11:function (value) {
console.log(value, 'test value');
}
}
}
</script>
自定义模板
将自定义的 HTML 模板插入w-option的 slot 中即可。
查看代码 < />
<template>
<w-select v-model="value6" placeholder="请选择">
<w-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>
</w-option>
</w-select>
</template>
<script>
export default {
data () {
return {
cities: [
{
value: '选项1',
label: 'Atezolizumab注射液'
}, {
value: '选项2',
label: '马来酸阿法替尼片'
}, {
value: '选项3',
label: '依折麦布阿托伐他汀片'
}, {
value: '选项4',
label: '阿替利珠单抗注射液'
}, {
value: '选项5',
label: '依折麦布阿托伐他汀片'
}
],
value6: ''
}
}
}
</script>
分组
使用w-option-group对备选项进行分组,它的label属性为分组名。
查看代码 < />
<template>
<w-select v-model="value7" placeholder="请选择">
<w-option-group
v-for="group in options3"
:key="group.label"
:label="group.label">
<w-option
v-for="item in group.options"
:key="item.value"
:label="item.label"
:value="item.value">
</w-option>
</w-option-group>
</w-select>
</template>
<script>
export default {
data () {
return {
options3: [{
label: '热门城市',
options: [{
value: 'Shanghai',
label: '上海'
}, {
value: 'Beijing',
label: '北京'
}]
}, {
label: '城市名',
options: [{
value: 'Chengdu',
label: '成都'
}, {
value: 'Shenzhen',
label: '深圳'
}, {
value: 'Guangzhou',
label: '广州'
}, {
value: 'Dalian',
label: '大连'
}]
}],
value7: ''
}
}
}
</script>
可搜索
为w-select添加filterable属性即可启用搜索功能。默认情况下,Select 会找出所有label属性包含输入值的选项。如果希望使用其他的搜索逻辑,可以通过传入一个filter-method来实现。filter-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。
查看代码 < />
<template>
<w-select v-model="value8"
filterable
:filter-method="filterMethod"
placeholder="请选择"
default-first-option>
<w-option
v-for="item in filteredOptions"
:key="item.pinyin"
:label="item.label"
:value="item.pinyin">
</w-option>
</w-select>
</template>
<script>
export default {
data () {
return {
options: [{
label: '上海',
pinyin: 'shanghai'
}, {
label: '北京',
pinyin: 'beijing'
}],
filteredOptions: [],
value8: ''
}
},
watch: {
value8:function (value) {
console.log(value, 'test value');
}
},
methods: {
filterMethod(query) {
this.filteredOptions = this.options.filter(option => {
return option.pinyin.indexOf(query) > -1;
})
}
}
}
</script>
远程搜索
为了启用远程搜索,需要将filterable和remote设置为true,同时传入一个remote-method。remote-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。需要注意的是,如果w-option是通过v-for指令渲染出来的,此时需要为w-option添加key属性,且其值需具有唯一性,比如此例中的item.value。
查看代码 < />
<template>
<w-select
v-model="value9"
multiple
filterable
remote
reserve-keyword
default-first-option
placeholder="请输入关键词"
:remote-method="remoteMethod"
:loading="loading">
<w-option
v-for="(item,index) in options4"
:key="index"
:label="item.label"
:value="item.value">
</w-option>
</w-select>
</template>
<script>
export default {
data () {
return {
options4: [],
value9: [],
list: [],
loading: false,
states: ["Atezolizumab注射液", "马来酸阿法替尼片", "阿德福韦酯片",
"依折麦布阿托伐他汀片", "阿托伐他汀钙分散片", "Acalabrutinib胶囊",
"阿替利珠单抗注射液"]
}
},
mounted() {
this.list = this.states.map(item => {
return { value: item, label: item };
});
},
methods: {
remoteMethod(query) {
if (query !== '') {
this.loading = true;
setTimeout(() => {
this.loading = false;
this.options4 = this.list.filter(item => {
return item.label.toLowerCase()
.indexOf(query.toLowerCase()) > -1;
});
}, 200);
} else {
this.options4 = [];
}
}
}
}
</script>
创建条目
使用allow-create属性即可通过在输入框中输入文字来创建新的条目。注意此时filterable必须为真。本例还使用了default-first-option属性,在该属性打开的情况下,按下回车就可以选中当前选项列表中的第一个选项,无需使用鼠标或键盘方向键进行定位。
查看代码 < />
<template>
<w-select
v-model="value10"
multiple
filterable
allow-create
default-first-option
placeholder="请选择文章标签">
<w-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value">
</w-option>
</w-select>
</template>
<script>
export default {
data () {
return {
options5: [
{
value: '选项1',
label: 'Atezolizumab注射液'
}, {
value: '选项2',
label: '马来酸阿法替尼片'
}, {
value: '选项3',
label: '依折麦布阿托伐他汀片'
}, {
value: '选项4',
label: '阿替利珠单抗注射液'
}, {
value: '选项5',
label: '依折麦布阿托伐他汀片'
}
],
value10: []
}
}
}
</script>
API
Select Attributes
参数 | 说明 | 类型 | 可选值 | 默认值 | Version |
---|---|---|---|---|---|
allow-create | 是否允许用户创建新条目,需配合 filterable 使用 | Boolean | — | false | |
automatic-dropdown | 对于不可搜索的 Select,是否在输入框获得焦点后自动弹出选项菜单 | Boolean | - | false | |
clearable | 是否可以清空选项 | Boolean | — | false | |
collapse-tags | 多选时是否将选中值按文字的形式展示 | Boolean | — | false | |
disabled | 是否禁用 | Boolean | — | false | |
default-first-option | 在输入框按下回车,选择第一个匹配项。需配合 filterable 或 remote 使用 | Boolean | - | false | |
filterable | 是否可搜索 | Boolean | — | false | |
filter-method | 自定义搜索方法 | Function | — | — | |
loading | 是否正在从远程获取数据 | Boolean | — | false | |
loading-text | 远程加载时显示的文字 | String | — | 加载中 | |
multiple | 是否多选 | Boolean | — | false | |
multiple-limit | 多选时用户最多可以选择的项目数,为 0 则不限制 | Number | — | 0 | |
no-match-text | 搜索条件无匹配时显示的文字 | String | — | 无匹配数据 | |
no-data-text | 选项为空时显示的文字 | String | — | 无数据 | |
placeholder | 占位符 | String | — | 请选择 | |
popper-class | Select 下拉框的类名 | String | — | — | |
popper-append-to-body | 是否将弹出框插入至 body 元素。在弹出框的定位出现问题时,可将该属性设置为 false | Boolean | - | true | |
remote | 是否为远程搜索 | Boolean | — | false | |
remote-method | 远程搜索方法 | Function | — | — | |
reserve-keyword | 多选且可搜索时,是否在选中一个选项后保留当前的搜索关键词 | Boolean | — | false | |
size | 输入框尺寸 | String | medium/small/mini | — | |
show-folded-tags | 是否开启气泡展示折叠选项的功能 | Boolean | — | true | v1.7.5 |
tags-threshold | 开启多选且折叠标签时,超过该阈值的选项将被折叠 | Number | — | 1 | v1.7.0 |
value-key | 作为 value 唯一标识的键名,绑定值为对象类型时必填 | String | — | value |
Select Events
事件名称 | 说明 | 回调参数 | Version |
---|---|---|---|
blur | 当 input 失去焦点时触发 | (event: Event) | |
change | 选中值发生变化时触发 | 目前的选中值 | |
clear | 可清空的单选模式下用户点击清空按钮时触发 | — | |
focus | 当 input 获得焦点时触发 | (event: Event) | |
remove-tag | 多选模式下移除tag时触发 | 移除的tag值 | |
visible-change | 下拉框出现/隐藏时触发 | 出现则为 true,隐藏则为 false |
Select Slots
name | 说明 | Version |
---|---|---|
— | Option 组件列表 | |
prefix | Select 组件头部内容 |
Option Group Attributes
参数 | 说明 | 类型 | 可选值 | 默认值 | Version |
---|---|---|---|---|---|
disabled | 是否将该分组下所有选项置为禁用 | Boolean | — | false | |
label | 分组的组名 | String | — | — |
Option Attributes
参数 | 说明 | 类型 | 可选值 | 默认值 | Version |
---|---|---|---|---|---|
disabled | 是否禁用该选项 | Boolean | — | false | |
label | 选项的标签,若不设置则默认与 value 相同 | String/ Number | — | — | |
value | 选项的值 | String/ Number/ Object | — | — |
Methods
方法名 | 说明 | 参数 | Version |
---|---|---|---|
blur | 使 input 失去焦点,并隐藏下拉框 | - | |
focus | 使 input 获取焦点 | - |
贡献者
类型 | 参与者 |
---|---|
设计者 | UED视觉组 |
维护者 | UED前端组 |