vue 实现element-ui checkbox全选操作

<template>
    <div>
    
        <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
    
        <el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
    
            <el-checkbox v-for="(city,i) in cities" :label="city.name" :key="i" style="display:block">{{city.name}}</el-checkbox>
                <!-- 加上display:block即代表竖向排列 -->
        </el-checkbox-group>
    
    
    
    </div>
</template>

<script>
export default {
    data() {
        return {
            //全选
            checkAll: false,
            cities: [{
                    "name": "高一",
                    "value": "928"
                },
                {
                    "name": "高二",
                    "value": "929"
                },
                {
                    "name": "高三",
                    "value": "930"
                }
            ], //数据源
            checkedCities: [], //绑定默认选中
            isIndeterminate: false, //设置 indeterminate 状态,只负责样式控制
        };
    },
    methods: {
        // 全选 --- 当绑定值变化时触发的事件
        handleCheckAllChange(val) {
            console.log(val); //val的值是一个布尔值,点中全选为false,取消全选为true
            this.cities.forEach((item) => {
                //当全选被选中的时候,循环遍历源数据,把数据的每一项加入到默认选中的数组去
                this.checkedCities.push(item.name);
            });
            console.log("🚀 ~ file: checkbox.vue:47 ~ this.cities.forEach ~ checkedCities:", this.checkedCities)
            this.checkedCities = val ? this.checkedCities : []; //三元表达式,如果val的值为true,那么就把当前默认选中的值赋值给自身,这样页面页面上所有的元素就都选中了。如果为false,就是取消全选
            this.isIndeterminate = false; //官网说这是个样式控制,是来控制,什么时候半选的,要不要都无所谓,看你需求
        },
        // checkbox选中 --- 当绑定值变化时触发的事件
        handleCheckedCitiesChange(value) {
            console.log(value)
            let checkedCount = value.length; //选中值的长度
            this.checkAll = checkedCount === this.cities.length; //如果选中值的长度和源数据的长度一样,返回true,就表示你已经选中了全部checkbox,那么就把true赋值给this.checkAll
            this.isIndeterminate =
                checkedCount > 0 && checkedCount < this.cities.length; //同全选按钮事件里面的那个样式控制
        },
    },
};
</script>

<style lang="scss" scoped>

</style>

简单写法

<el-checkbox v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
  <el-checkbox v-for="(city,i) in cities" :label="city.name" :key="i" v-model="checkedCities" @change="handleCheckedCitiesChange">{{city.name}}</el-checkbox>
handleCheckAllChange(val) {//val就是v-model绑定的值,即this.checkAll
    if(this.checkAll){
        this.cities.forEach(item=>{
            this.checkedCities.push(item.name)
        })
    }else {
        this.checkedCities = []
    }

},
handleCheckedCitiesChange(value) {//value就是v-model绑定的值,即this.checkedCities
    console.log(this.checkedCities);
    if(this.checkedCities.length == this.cities.length){
        this.checkAll=true
    }else{
        this.checkAll=false
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VueElement UI的Table组件中实现分页复选功能,可以按照以下步骤进行操作: 1. 在Vue组件中引入Element UI的Table和Checkbox组件: ```javascript import { Table, Checkbox } from 'element-ui'; ``` 2. 在data中定义需要用到的变量: ```javascript data() { return { // 表格数据 tableData: [], // 选中的行数据 selectedRows: [], // 是否全选 isAllSelected: false } } ``` 3. 在模板中使用Table和Checkbox组件,并设置相应属性和事件: ```html <template> <div> <el-table :data="tableData" @row-click="handleRowClick"> <el-table-column type="selection" width="55"> <template slot-scope="scope"> <el-checkbox v-model="selectedRows" :label="scope.row" @change="handleCheckboxChange"></el-checkbox> </template> </el-table-column> <!-- 其他列定义--> </el-table> </div> </template> ``` 4. 在methods中定义事件处理函数: ```javascript methods: { // 单击行选中/取消选中 handleRowClick(row) { const index = this.selectedRows.indexOf(row); if (index > -1) { this.selectedRows.splice(index, 1); } else { this.selectedRows.push(row); } }, // 全选/取消全选 handleCheckboxChange(value) { if (value.length === this.tableData.length) { this.isAllSelected = true; } else { this.isAllSelected = false; } } } ``` 5. 在模板中使用全选Checkbox,并绑定isAllSelected属性: ```html <el-checkbox v-model="isAllSelected" @change="handleSelectAllChange">全选</el-checkbox> ``` 6. 在methods中定义全选Checkbox的 change 事件: ```javascript methods: { // 全选/取消全选 handleSelectAllChange(value) { if (value) { this.selectedRows = [...this.tableData]; } else { this.selectedRows = []; } } } ``` 以上就是在VueElement UI的Table中实现分页复选功能的步骤。通过监听行点击事件,可以实现点击行选中/取消选中的功能;通过绑定Checkbox的v-model和change事件,可以实现全选功能;通过管理选中的行数据,可以获取用户选择的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱池鱼的酱酱仔

您的鼓励是我前进的动力哦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值