Select 选择器
基础用法
适用广泛的基础单选
v-model的值为当前被选中的option的 value 属性值
<template>
<os-select v-model="value1">
<os-option label="裁决之仗" :value="1"></os-option>
<os-option label="骨玉权杖" :value="2"></os-option>
<os-option label="龙纹剑" :value="3"></os-option>
<os-option label="霸者之刃" :value="4"></os-option>
<os-option label="血饮" :value="5"></os-option>
<os-option label="逍遥扇" :value="6"></os-option>
</os-select>
</template>
<script>
export default {
data() {
return {
value1: ""
};
}
};
</script>
有禁用选项
在option中,设定disabled值为 true,即可禁用该选项
<template>
<os-select v-model="value2">
<os-option label="裁决之仗" :value="1"></os-option>
<os-option label="骨玉权杖" :value="2"></os-option>
<os-option label="龙纹剑" :value="3"></os-option>
<os-option label="霸者之刃" :value="4" disabled></os-option>
</os-select>
</template>
<script>
export default {
data() {
return {
value2: ""
};
}
};
</script>
禁用状态
选择器不可用状态
为select设置disabled属性,则整个选择器不可用
<template>
<os-select v-model="value3" disabled>
<os-option label="裁决之仗" :value="1"></os-option>
<os-option label="骨玉权杖" :value="2"></os-option>
<os-option label="龙纹剑" :value="3"></os-option>
<os-option label="霸者之刃" :value="4"></os-option>
</os-select>
</template>
<script>
export default {
data() {
return {
value3: ""
};
}
};
</script>
可清空单选
包含清空按钮,可将选择器清空为初始状态
为select设置clearable属性,则可将选择器清空。
<template>
<os-select v-model="value4" clearable>
<os-option label="裁决之仗" :value="1"></os-option>
<os-option label="骨玉权杖" :value="2"></os-option>
<os-option label="龙纹剑" :value="3"></os-option>
<os-option label="霸者之刃" :value="4"></os-option>
</os-select>
</template>
<script>
export default {
data() {
return {
value4: ""
};
}
};
</script>
基础多选
适用性较广的基础多选,用 Tag 展示已选项
为select设置multiple属性即可启用多选,此时v-model的值为当前选中值所组成的数组。选中值会以 Tag 的形式展现。
<template>
<os-select v-model="values" multiple filterable>
<os-option label="裁决之仗" :value="1"></os-option>
<os-option label="骨玉权杖" :value="2"></os-option>
<os-option label="龙纹剑" :value="3"></os-option>
<os-option label="霸者之刃" :value="4"></os-option>
</os-select>
</template>
<script>
export default {
data() {
return {
values: []
};
}
};
</script>
自定义模板
可以自定义备选项
将自定义的 HTML 模板插入 option 的 slot 中即可。
<template>
<os-select v-model="value5" clearable>
<os-option
v-for="item in options"
:key="item.value"
:value="item.value"
:label="item.label"
>
<span>{{ item.label }}</span>
<em style="color: #7ec699; float: right">{{ item.type }}</em>
</os-option>
</os-select>
</template>
<script>
export default {
data() {
return {
value5: "",
options: [
{ label: "裁决之仗", type: "战士", value: 1 },
{ label: "骨玉权杖", type: "法师", value: 2 },
{ label: "龙纹剑", type: "道士", value: 3 },
{ label: "霸者之刃", type: "全职业", value: 4 }
]
};
}
};
</script>
分组
备选项进行分组展示
使用option-group对备选项进行分组,它的label属性为分组名
<template>
<os-select v-model="value6">
<os-option-group
v-for="item in equip"
:key="item.value"
:label="item.label"
>
<os-option
v-for="cell in item.list"
:key="cell.value"
:value="cell.value"
:label="cell.label"
/>
</os-option-group>
</os-select>
</template>
<script>
export default {
data() {
return {
value6: "",
equip: [
{
label: "武器",
value: "weapon",
list: [
{ label: "裁决之仗", type: "战士", value: 1 },
{ label: "骨玉权杖", type: "法师", value: 2 },
{ label: "龙纹剑", type: "道士", value: 3 },
{ label: "霸者之刃", type: "全职业", value: 4 }
]
},
{
label: "首饰",
value: "ornaments",
list: [
{ label: "力量戒指", type: "战士", value: 5 },
{ label: "龙之手镯", type: "法师", value: 6 },
{ label: "灵魂项链", type: "道士", value: 7 },
{ label: "降妖除魔戒指", type: "全职业", value: 8 }
]
}
]
};
}
};
</script>
可搜索
可以利用搜索功能快速查找选项
为select添加filterable属性即可启用搜索功能。默认情况下,Select 会找出所有label属性包含输入值的选项。如果希望使用其他的搜索逻辑,可以通过传入一个filter-method来实现。filter-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。
<template>
<os-select v-model="value7" filterable>
<os-option
v-for="cell in filterOptions"
:key="cell.value"
:value="cell.value"
:label="cell.label"
/>
</os-select>
</template>
<script>
export default {
data() {
return {
value7: ""
};
}
};
</script>
远程搜索
从服务器搜索数据,输入关键字进行查找
为了启用远程搜索,需要将filterable和remote设置为true,同时传入一个remote-method。remote-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。需要注意的是,如果option是通过v-for指令渲染出来的,此时需要为option添加key属性,且其值需具有唯一性,比如此例中的item.value。
<template>
<os-select
v-model="value8"
filterable
remote
:remote-method="asyncLoadOptions"
:loading="loading"
>
<os-option
v-for="cell in asyncOptions"
:key="cell.value"
:value="cell.value"
:label="cell.label"
/>
</os-select>
</template>
<script>
export default {
data() {
return {
loading: false,
value8: "",
asyncOptions: []
};
},
methods: {
asyncLoadOptions(queryString) {
if (!queryString) {
this.asyncOptions = [];
return;
}
this.loading = true;
const options = [
{ label: "裁决之仗", type: "战士", value: 1 },
{ label: "骨玉权杖", type: "法师", value: 2 },
{ label: "龙纹剑", type: "道士", value: 3 },
{ label: "霸者之刃", type: "全职业", value: 4 },
{ label: "力量戒指", type: "战士", value: 5 },
{ label: "龙之手镯", type: "法师", value: 6 },
{ label: "灵魂项链", type: "道士", value: 7 },
{ label: "降妖除魔戒指", type: "全职业", value: 8 },
{ label: "绿玉屠龙", type: "战士", value: 9 }
];
setTimeout(() => {
this.loading = false;
this.asyncOptions = options.filter(
d => d.label.indexOf(queryString) > -1
);
}, 444);
}
}
};
</script>
Select 属性
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
value / v-model | 绑定值 | boolean/string/number/array | -- | -- |
multiple | 是否多选 | boolean | -- | false |
disabled | 是否禁用 | boolean | -- | false |
size | 尺寸 | string | large/medium/small/mini | medium |
clearable | 是否可以清空选项 | boolean | -- | false |
multiple-limit | 多选时的数量限制,为 0 则不限制 | number | -- | 0 |
placeholder | 占位符 | string | -- | 请选择 |
filterable | 是否可搜索 | boolean | -- | false |
filter-method | 自定义搜索方法 | function | -- | -- |
remote | 是否为远程搜索 | boolean | -- | false |
remote-method | 远程搜索方法 | function | -- | -- |
loading | 是否正在从远程获取数据 | boolean | -- | false |
Select 事件
事件名称 | 说明 | 回调参数 |
---|---|---|
change | 选中值发生变化时触发 | 目前的选中值 |
visible-change | 下拉框出现/隐藏时触发 | 出现则为 true,隐藏则为 false |
remove-tag | 多选模式下移除 tag 时触发 | 移除的 tag 值 |
clear | 可清空的单选模式下用户点击清空按钮时触发 | -- |
blur | 当 input 失去焦点时触发 | (event: Event) |
focus | 当 input 获得焦点时触发 | (event: Event) |
Option Group 属性
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
label | 分组的组名 | string | -- | -- |
Option 属性
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
value | 选项的值 | string/number | -- | -- |
label | 选项的标签 | string/number | -- | -- |
disabled | 是否禁用该选项 | boolean | -- | false |