elementUI 下拉框多选增加全选功能,带搜索

在<option>中添加一项 ‘全选’ ,并且带搜索功能,回退搜索条件,依然生效。

 

父组件使用:

<all-select
    v-if="funcsList.length"
    :select_options="funcsList"
    @update="funcsChange">
</all-select>

var vm = new Vue({
    el: '#app',
    data: {
        funcsList:[],
    },
    methods: {
        funcsChange(val) {
            let selectArray = val.filter(item=>item!='全选')
        },
    }

 注册自定义组件:

Vue.component('all-select', {
    data() {
        return {
            selectedArr: [],
            filteredOptions: [],
        }
    },
    props: {
        select_options:{
            type:Array,
            default(){
                return []
            }
        },
    },
    watch:{
        select_options:function () {
            this.selectedArr = []
        }
    },
    created(){
      this.filteredOptions = [...this.select_options]
    },
    methods: {
        selectAll() {
            if (this.selectedArr.length < this.filteredOptions.length) {
                this.filteredOptions.map((item) => {
                    this.selectedArr.push(item.value)
                })
            } else { // 取消全选
                this.selectedArr = [];
            }
        },
        changeSelect(val) {
            if (!val.includes('全选') && val.length === this.select_options.length) {
                this.selectedArr.unshift('全选')
            }
        },
        removeTag(val) {
            if (val === '全选') {
                this.selectedArr = [];
            }
            this.$emit('update',this.selectedArr);
        },
        handleFilter(query) {
            if (query) {
                this.filteredOptions = this.select_options.filter(item => {
                    return item.label.includes(query);
                });
            } else {
                this.filteredOptions = [...this.select_options];
            }
        },
        visibleChange(flag) {
            if (flag) {
                this.filteredOptions = [...this.select_options]
            }else {
                this.$emit('update',this.selectedArr);
            }
        }
    },
    template: `<el-select
    size="mini"
    multiple
    filterable
    reserve-keyword
    clearable
    :disabled="disabled"
    v-model='selectedArr'
    :loading="mulSelectLoading"
    :collapse-tags="collapseTags"
    placeholder='请选择'
    @change='changeSelect'
    @visible-change="visibleChange"
    :filter-method="handleFilter"
    @remove-tag='removeTag'>
    <el-option label='全选' value='全选' @click.native.stop="selectAll" v-                        if="select_options.length">
    </el-option>
    <el-option v-for='item in filteredOptions' :key='item.value' :label='item.label' :value='item.value'></el-option>
      </el-select>`
});

### 如何在 ElementUI 下拉框中添搜索功能 为了实现在 `ElementUI` 的 `el-select` 组件中搜索功能,可以利用该组件自的过滤特性。具体来说,在配置 `el-option` 项时启用 `filterable` 属性即可开启筛模式[^1]。 下面是一个简单的例子来展示如何设置搜索能力的择器: ```html <template> <div id="app"> <!-- 使用 filterable 属性使 select 支持搜索 --> <el-select v-model="selectedValue" placeholder="请择" filterable clearable style="width: 200px;"> <el-option v-for="(item,index) in options" :key="index" :label="item.label" :value="item.value"> </el-option> </el-select> </div> </template> <script> export default { data() { return { selectedValue: &#39;&#39;, options: [ { value: &#39;option1&#39;, label: &#39;黄金糕&#39; }, { value: &#39;option2&#39;, label: &#39;双皮奶&#39; }, { value: &#39;option3&#39;, label: &#39;蚵仔煎&#39; } ] }; } }; </script> ``` 此代码片段展示了基本的可搜索下拉菜单结构。当用户输入关键字时,会自动匹配符合条件的数据项并显示出来供择。 对于更复杂的需求,比如远程搜索,则可以通过监听 `remote-method` 方法,并结合服务器端接口完成异步载数据的操作;同时需将 `remote` 设置为 true 来激活远端查询行为[^2]。 另外值得注意的是,如果希望进一步增强用户体验,还可以考虑引入一些高级特性,例如分页支持或是自定义渲染逻辑等。这些都可以基于官方文档中的说明进行扩展开发[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值