--- pageClass: comp-page-class --- # Select 选择器 ## 概述 使用模拟的增强下拉选择器来代替浏览器原生的选择器。 ## 代码示例 <ClientOnly> <row> <cell span="12" class="pr-20"> <componetTemplate title="基础用法" template="ui/templates/select/1.html"> <template v-slot:demo> <Wb-select v-model="value1"> <wb-option :value="1" label="北京市"></wb-option> <wb-option :value="2">上海市</wb-option> <wb-option :value="3" disabled>深圳市</wb-option> <wb-option :value="4">杭州市</wb-option> <wb-option :value="5">南京市</wb-option> <wb-option :value="6">重庆市</wb-option> </Wb-select> </template> <template v-slot:description> <p>Wb-select内部嵌套Wb-option使用,类似原生select内部嵌套option</p> <p>Wb-selec默认宽度是100%</p> <p>设置Wb-option为disabled表示禁用此选项</p> <p>当选择一项时触发on-change事件</p> </template> </componetTemplate> <componetTemplate title="多选" template="ui/templates/select/2.html"> <template v-slot:demo> <Wb-select v-model="value2" multiple :multiple-limit="2"> <wb-option :value="1" label="北京市"></wb-option> <wb-option :value="2">上海市</wb-option> <wb-option :value="3">深圳市</wb-option> <wb-option :value="4">杭州市</wb-option> <wb-option :value="5">南京市</wb-option> <wb-option :value="6">重庆市</wb-option> </Wb-select> </template> <template v-slot:description> <p>添加multiple属性,value值必须是数组</p> <p>可以通过multipleLimit属性来控制最多选择几个,默认为0</p> </template> </componetTemplate> </cell> <cell span="12" class="pl-20"> <componetTemplate title="可搜索" template="ui/templates/select/3.html"> <template v-slot:demo> <Wb-select v-model="value3" filterable> <wb-option :value="1">北京市</wb-option> <wb-option :value="2">上海市</wb-option> <wb-option :value="3">深圳市</wb-option> <wb-option :value="4">杭州市</wb-option> <wb-option :value="5">南京市</wb-option> <wb-option :value="6">重庆市</wb-option> </Wb-select> <Wb-select v-model="value3" filterable @on-search="search"> <wb-option v-for="item in options" :key="item" :value="item">{{item}}</wb-option> </Wb-select> </template> <template v-slot:description> <p>设置filterable属性,则选项可以根据输入的内容筛选。</p> <p>通过on-search监听输入的内容,在回调更新option选项数据</p> </template> </componetTemplate> <componetTemplate title="高性能" template="ui/templates/select/4.html"> <template v-slot:demo> <Wb-select v-model="value4" :options="arr" options-value-name="value1" options-text-name="text1" filterable @on-change="change"> </Wb-select> </template> <template v-slot:description> <p>将列表数据通过options传入,可以达到高性能,渲染1万+的数据也不卡</p> <p>optionsValueName配置传入数据中value的字段名</p> <p>optionsTextName配置传入数据中text的字段名</p> </template> </componetTemplate> </cell> </row> </ClientOnly> <style lang="scss"> .code-box-demo{ .ui-select:first-child{ margin-top: 0px; } } .ui-select { display: block; margin-top: 20px; width: 50% } .ui-select .ui-select-dropdown-list { padding: 0; } </style> <script> export default { data() { return { value1: '', value2: [], value3: '', value4: '', options: [1, 2, 3, 4], arr: [] } }, mounted () { setTimeout(() => { let i = 0; this.arr = []; while (i < 10000) { this.arr.push({ value1: i, text1: `option${i}` }) i++; } }, 1000); }, methods: { change (value) { console.log(value) }, search(value){ setTimeout(()=>{ this.options = []; for(let i=1; i< 10; i++){ this.options.push(value + '|' + i) } }, 500) } } } </script> ## API ### Select Props | 属性 | 说明 | 类型 | 默认值 | |:--------------|:--------------------------|:--------|:-----------------------------------------------------| | value | 输入的值, 可以使用v-model实现数据的双向绑定 | Number, String, File | '' | | placeholder | 提示语 | String | '' | | disabled | 是否禁止输入 | Boolean | false | | readonly | 是否只读 | Boolean | false | | clearable | 是否显示清空按钮 | Boolean | false | | filterable | 是否可筛选 | Boolean | false | | multiple | 是否多选 | Boolean | false | | multipleLimit | 仅多选时使用,限制选择数,默认值0不限制选择个数 | Number | 0 | | options | 配置选项的数据 | Array | null | | optionsValueName | 指定选项对象的那个字段为值 | String | 'value' | | optionsTextName | 指定选项对象的那个字段为text | String | 'text' | ### Select Events | 事件名 | 说明 | 返回值 | |:--------------|:--------------------------|:--------| | on-search | 当设置filterable为true,输入过滤条件时触发。连续输入不触发,自带200毫秒的debounce | (value, event) => void | | on-change | 值改变时触发 | (value, event) => void | ### Option Props | 属性 | 说明 | 类型 | 默认值 | |:--------------|:--------------------------|:--------|:-----------------------------------------------------| | value | 选项的值 | Number, String | '' | | label | 选项的内容 | String | '' | | disabled | 是否禁止选中 | Boolean | false |