0


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
    }
}
标签: vue.js ui javascript

本文转载自: https://blog.csdn.net/weixin_53339757/article/details/130118391
版权归原作者 爱吃鱼的酱酱仔 所有, 如有侵权,请联系我们删除。

“vue 实现element-ui checkbox全选操作”的评论:

还没有评论