vue2 el-checkbox-group复选框无法选中问题及解决
更新时间:2024年05月28日 16:20:26 作者:小果子^_^
这篇文章主要介绍了vue2 el-checkbox-group复选框无法选中问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
vue2 el-checkbox-group 复选框无法选中
原代码
<template slot-scope="scope"> <el-checkbox v-model="scope.row.bitian">必填</el-checkbox> </template> if (this.allTemplateList && this.allTemplateList.length > 0) { this.allTemplateList.forEach(template => { template.bitian = false; template.number = ''; template.shangchuandatas = []; template.wenjiandaxiao = ''; }) },
修改后
在遍历 this.allTemplateList 时,使用 Vue.set 或 this.$set 来确保新添加的属性是响应式的
if (this.allTemplateList && this.allTemplateList.length > 0) { this.allTemplateList.forEach((template, index) => { this.$set(this.allTemplateList, index, { ...template, bitian: false, number: '', shangchuandatas: [], wenjiandaxiao: '', }); }); }
多个el-checkbox-group复选框组 选项互斥
需求
多个el-checkbox-group复选框组 , 组与组之间的选项是互斥的效果
效果
代码实现(方法一)
- template
<template> <div class="page"> <el-checkbox-group v-for="(item, index) in list" v-model="item.checked" :key="index" @change="checkboxChange" > <el-checkbox v-for="(jitem, jindex) in item.checkData" :label="jitem.label" :key="jindex" :disabled="jitem.disabled" >{{ jitem.name }}</el-checkbox > </el-checkbox-group> </div> </template>
- script
<script> export default { name: 'xxx', data() { return { list: [ { checked: [], // 选中值 checkData: [ // 复选框 { label: 'name1', name: '名称1', disabled: false }, { label: 'name2', name: '名称2', disabled: false }, { label: 'name3', name: '名称3', disabled: false } ] }, { checked: [], checkData: [ { label: 'name1', name: '名称1', disabled: false }, { label: 'name4', name: '名称4', disabled: false }, { label: 'name3', name: '名称3', disabled: false } ] }, { checked: [], checkData: [ { label: 'name1', name: '名称1', disabled: false }, { label: 'name4', name: '名称4', disabled: false }, { label: 'name3', name: '名称3', disabled: false } ] }, { checked: [], checkData: [ { label: 'name5', name: '名称5', disabled: false }, { label: 'name1', name: '名称1', disabled: false }, { label: 'name3', name: '名称3', disabled: false } ] } ] } }, methods: { /** * @description 复选框change事件 * @param {array} val 复选框值 * @param {number} i 索引 * @return {void} Do not return anything */ checkboxChange() { let checkedAll = []// 存储所有的选中值 this.list.forEach(item => { // 初始化数据,复选框都可选 item.checkData.forEach(jitem => { jitem.disabled = false }) // 将选中的数据存储arr中 item.checked.forEach(kitem => { checkedAll.push(kitem) }) }) // 去重 checkedAll = Array.from(new Set(checkedAll)) // 互斥操作 this.list.forEach(item => { item.checkData.forEach(jitem => { if (checkedAll.includes(jitem.label) && !item.checked.includes(jitem.label)) { // 当复选框对应数据存在arr中,不存在对应的checked中时,设为禁用状态 jitem.disabled = true } }) }) } } } </script>
代码实现(方法二)
- template
<template> <div class="page"> <el-form> <el-form-item v-for="(item, index) in list" :label="'复选框组' + (index + 1)" :key="index"> <el-checkbox-group v-model="item.checked"> <el-checkbox v-for="(jitem, jindex) in item.checkData" :label="jitem.label" :key="jindex" :disabled="setDisabledMuti(jitem, index)" >{{ jitem.name }}</el-checkbox> </el-checkbox-group> </el-form-item> </el-form> </div> </template>
- script
<script> export default { name: 'xxx', data() { return { checkedAll: [], list: [ { checked: ['name1'], // 选中值 checkData: [ // 复选框 { label: 'name1', name: '名称1' }, { label: 'name2', name: '名称2' }, { label: 'name3', name: '名称3' } ] }, { checked: ['name4'], checkData: [ { label: 'name1', name: '名称1' }, { label: 'name4', name: '名称4' }, { label: 'name3', name: '名称3' } ] }, { checked: ['name3'], checkData: [ { label: 'name1', name: '名称1' }, { label: 'name4', name: '名称4' }, { label: 'name3', name: '名称3' } ] }, { checked: ['name5'], checkData: [ { label: 'name5', name: '名称5' }, { label: 'name1', name: '名称1' }, { label: 'name3', name: '名称3' } ] } ] } }, //计算属性 computed: { setDisabledMuti() { return function(opt, index) { // 全部已选择 const tempArr = this.list.map(item => item.checked) // 先删除自己的已选 tempArr.splice(index, 1) // 转为一维数组 const selectedArr = tempArr.flat(); // 其它的已选,禁用 return selectedArr.includes(opt.label) } } } } </script>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
vue3中v-for报错'item'is of type'unknown'的
在写vue3+ts的项目,得到一个数组,需要循环展示,使用v-for循环,写完之后发现有个报错,接下来通过本文给大家介绍vue3中v-for报错 ‘item‘ is of type ‘unknown‘的解决方法,感兴趣的朋友一起看看吧2023-11-11Vue+EleMentUI实现el-table-colum表格select下拉框可编辑功能实例
这篇文章主要给大家介绍了关于Vue+EleMentUI实现el-table-colum表格select下拉框可编辑功能的相关资料,element-UI表格的使用相信大家都不陌生,文中给出了详细的代码示例,需要的朋友可以参考下2023-07-07
最新评论