element selected 自定义搜索

<el-select
  size="mini"
  v-model="value"
  @change="handleChange"
  :disabled="readonly"
  clearable
  filterable
  :filter-method="dataFilter"
  placeholder="请选择">
<el-option
    v-for="item in listOne"
    :key="item.id"
    :label="item.name"
    :value="item.id">
</el-option>
</el-select>
export default {
data () {
return {
      listOne: [],
      listTwo: [],
      value: ''
};
},
methos: {
    dataFilter (val) {
      if (val) { // val存在
        this.listOne= this.listTwo.filter((item) => {
          if (!!~item.name.indexOf(val) || !!~item.name.toUpperCase().indexOf(val.toUpperCase())) {
            return true;
          }
        });
      } else { // val为空时,还原数组
        this.listOne= this.listTwo;
      }
    },
}
};
Element-Plus 的 Select 组件支持自定义选项模板和选项分组,以下是一个简单的自定义 Select 组件示例: ```html <template> <el-select v-model="value" :placeholder="placeholder" :multiple="multiple" :collapse-tags="collapseTags" :filterable="filterable" :allow-create="allowCreate" :default-first-option="defaultFirstOption" :popper-class="popperClass" :remote="remote" :loading="loading" :loading-text="loadingText" :no-match-text="noMatchText" :no-data-text="noDataText" :popper-append-to-body="popperAppendToBody" :automatic-dropdown="automaticDropdown" :reserve-keyword="reserveKeyword" @change="handleChange"> <template #default="{option}"> <span v-if="option.value !== 'divider'" class="el-select-dropdown__item">{{ option.label }}</span> <el-divider v-else /> </template> <template #group="{group}"> <span class="el-select-dropdown__item el-select-group">{{ group.label }}</span> </template> </el-select> </template> <script> export default { name: 'CustomSelect', props: { placeholder: { type: String, default: '请选择' }, value: { type: [String, Number, Array], default: '' }, multiple: { type: Boolean, default: false }, collapseTags: { type: Boolean, default: false }, filterable: { type: Boolean, default: false }, allowCreate: { type: Boolean, default: false }, defaultFirstOption: { type: Boolean, default: false }, popperClass: { type: String, default: '' }, remote: { type: Boolean, default: false }, loading: { type: Boolean, default: false }, loadingText: { type: String, default: '加载中' }, noMatchText: { type: String, default: '无匹配数据' }, noDataText: { type: String, default: '暂无数据' }, popperAppendToBody: { type: Boolean, default: true }, automaticDropdown: { type: Boolean, default: false }, reserveKeyword: { type: Boolean, default: false }, options: { type: Array, default: () => [] } }, methods: { handleChange(value) { this.$emit('change', value) } } } </script> ``` 在模板中,我们定义了两个插槽:`default` 和 `group`。`default` 插槽用于渲染每个选项,`group` 插槽用于渲染选项分组。在插槽中,我们可以访问到 `option` 和 `group` 对象,它们包含了选项和分组的相关信息。 同时,我们还定义了一些 props,用来控制 Select 的行为和样式。 使用自定义 Select 组件时,只需要传入 `options` 属性,指定选项列表,即可完成自定义。例如: ```html <template> <custom-select :options="options" v-model="selected" /> </template> <script> import CustomSelect from './CustomSelect.vue' export default { components: { CustomSelect }, data() { return { selected: '', options: [ { label: '选项一', value: '1' }, { label: '选项二', value: '2' }, { label: '选项三', value: '3' }, { label: '分组一', value: 'divider' }, { label: '选项四', value: '4', group: '分组一' }, { label: '选项五', value: '5', group: '分组一' } ] } } } </script> ``` 注意,在定义选项时,我们可以通过 `group` 属性指定选项所属的分组,从而实现选项分组的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值