el-select封装组件多选,选择全部与选其他选项互斥

本文介绍了如何在Vue的el-select组件中实现多选功能,并确保全选与选择其他选项互斥。通过示例展示了组件的使用方法和数据绑定,以及自定义处理值的变化逻辑。
摘要由CSDN通过智能技术生成

el-select封装组件多选,选择全部与选其他选项互斥

子组件中页面

<!-- el-select 多选 -->
<template>
    <el-select class="c-select" v-model="selectValue" :placeholder="placeholder" :multiple="multiple" :disabled="disabled"
               :size="size" :clearable="clearable" :filterable="filterable" :remote="remote" :remote-method="remoteMethod"
               :loading="loading" @change="handleChange">
        <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled">
        </el-option>
    </el-select>
</template>

<script>
    export default {
        name: '',
        data () {
            return {
                selectValue: '',
                loading: false
            }
        },
        props: {
            value: {
                type: Array,
                default: () => []
            },
            placeholder: {
                type: String,
                default: '请选择'
            },
            clearable: {
                type: Boolean,
                default: true
            },
            multiple: {
                type: Boolean,
                default: true
            },
            disabled: {
                type: Boolean,
                default: false
            },
            filterable: {
                type: Boolean,
                default: false
            },
            remote: {
                type: Boolean,
                default: false
            },
            options: {
                type: Array,
                default: () => []
            },
            remoteMethod: {
                type: Function,
                default: () => { }
            },
            size: {
                type: String,
                default: ''
            },
            styles: {
                type: Object,
                default: () => { }
            }
        },
        mounted () {
            this.selectValue = this.value
        },
        methods: {
            handleChange(value) {
                let index = value.indexOf('-1')
                if (value.length > 1) {
                    if (index>1) {
                        value = ['-1']
                    } else if (index >-1 ) {
                        value.splice(index,1)
                    }
                } 
                this.selectValue = value
                this.$emit('input', value)
                this.$emit('change',value)
            }
        }
    }

</script>
<style lang="scss" scoped>
    .c-select{
        &::v-deep .el-select__tags{
            overflow-x: scroll;
            flex-wrap: nowrap;
            &::-webkit-scrollbar {
                display: none;
            }
        }
    }
</style>

父组件中使用

import Selects from "@/components/selects"
<Cselects :multiple="true" v-model="query.companyType" :options="companyTypeList" placeholder="请选择">
</Cselects>

export default {
    name: '',
    data () {
        return {
            companyTypeList: [],
            query:{
                companyType: []
            }
        }
    },
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值