解决el-checkbox 无法全选,动态更新选中状态的问题

el-checkbox 是动态生成的,用$set更新选中状态没反应,发现是最外层嵌套el-checkbox-group的原因。。。

不用el-checkbox-group就好了

暴风哭泣,搞了一晚上,才发现

以下是el-checkbox实现全选、反选、多选的代码示例: 1. 全选 ```html <template> <div> <el-checkbox v-model="checkAll" @change="handleCheckAllChange">{{ checkAll ? '取消全选' : '全选' }}</el-checkbox> <br> <br> <el-checkbox-group v-model="checkedCities"> <el-checkbox v-for="city in cityOptions" :label="city" :key="city">{{ city }}</el-checkbox> </el-checkbox-group> </div> </template> <script> export default { data() { return { cityOptions: ['北京', '上海', '广州', '深圳'], checkedCities: [], checkAll: false, isIndeterminate: false, checkInvert: false }; }, methods: { handleCheckAllChange(val) { this.checkedCities = val ? this.cityOptions : []; this.isIndeterminate = false; this.checkInvert = false; } } }; </script> ``` 2. 反选 ```html <template> <div> <el-checkbox v-model="checkInvert" @change="handleCheckInvertChange">反选</el-checkbox> <br> <br> <el-checkbox-group v-model="checkedCities"> <el-checkbox v-for="city in cityOptions" :label="city" :key="city">{{ city }}</el-checkbox> </el-checkbox-group> </div> </template> <script> export default { data() { return { cityOptions: ['北京', '上海', '广州', '深圳'], checkedCities: [], checkAll: false, isIndeterminate: false, checkInvert: false }; }, methods: { handleCheckInvertChange() { this.checkedCities = this.cityOptions.filter(city => !this.checkedCities.includes(city)); this.checkAll = this.checkedCities.length === this.cityOptions.length; this.isIndeterminate = this.checkedCities.length > 0 && this.checkedCities.length < this.cityOptions.length; } } }; </script> ``` 3. 多选 ```html <template> <div> <el-checkbox v-model="checkAll" @change="handleCheckAllChange">{{ checkAll ? '取消全选' : '全选' }}</el-checkbox> <el-checkbox v-model="checkInvert" @change="handleCheckInvertChange">反选</el-checkbox> <br> <br> <el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange"> <el-checkbox v-for="city in cityOptions" :label="city" :key="city">{{ city }}</el-checkbox> </el-checkbox-group> <br> <br> <div>已选中 {{ checkedCities.length }} 项</div> <div v-if="isIndeterminate">已选中 {{ checkedCities.length }} 项,共 {{ cityOptions.length }} 项</div> </div> </template> <script> export default { data() { return { cityOptions: ['北京', '上海', '广州', '深圳'], checkedCities: [], checkAll: false, isIndeterminate: false, checkInvert: false }; }, methods: { handleCheckAllChange(val) { this.checkedCities = val ? this.cityOptions : []; this.isIndeterminate = false; this.checkInvert = false; }, handleCheckInvertChange() { this.checkedCities = this.cityOptions.filter(city => !this.checkedCities.includes(city)); this.checkAll = this.checkedCities.length === this.cityOptions.length; this.isIndeterminate = this.checkedCities.length > 0 && this.checkedCities.length < this.cityOptions.length; }, handleCheckedCitiesChange(value) { let checkedCount = value.length; this.checkAll = checkedCount === this.cityOptions.length; this.isIndeterminate = checkedCount > 0 && checkedCount < this.cityOptions.length; this.checkInvert = false; } } }; </script> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值