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: []
            }
        }
    },
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
`el-table` 是 Element UI 提供的一个用于展示表格数据的组件,它支持丰富的功能,包括多选功能。要实现勾互斥选项(即一次只能选择一项或多项,但不能同选择多项),你可以利用 `row-key` 和 `selection-method` 属性来定制选择行为。 **1. row-key**:设置每一行的唯一标识,当使用多选,这个属性很重要,因为它是确定哪一行被选中的依据。如果你的表格数据中每个对象有一个独特的 ID,可以设置为 `row-key="id"`。 **2. selection-method**:这是一个自定义方法,用于控制如何根据用户的选择更新行的状态。你可以在这个方法中添加互斥逻辑,例如: ```javascript methods: { selectRow(row) { if (this.selectedRows.length > 0) { // 如果已选中其他项,取消当前项的选择 this.$refs.table.clearSelection(); this.selectedRows.forEach(row => row.isSelected = false); } // 添加新的选中项 row.isSelected = true; this.selectedRows.push(row); }, deselectRow(row) { // 如果当前项被选中,移除它 row.isSelected = false; const index = this.selectedRows.indexOf(row); if (index !== -1) { this.selectedRows.splice(index, 1); } }, } ``` **3. 在模板上绑定事件**: 在表格的每行单元格上绑定 `@click` 事件,调用对应的 `selectRow` 或 `deselectRow` 方法。 ```html <template> <el-table :data="tableData" ref="table" :row-key="rowKey" selection-method="selectRow" @select="handleSelect" @row-click="handleRowClick" > <!-- 表格列 --> </el-table> </template> ``` **
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值