elementUI的checkBox已经checkGroup的数据绑定为对象时的回显问题的解决

el-checkbox的详情回显效果 当你遇到el-checkbox复选框选择时,它是进行多个选择的,如果我们想单选这个时候我们应该怎么做呢?上述的script方法是为了展示formQuery.managementSystem只能存在一个元素。这个是多个选择的,如果我们想单选代码怎么写呢。再来看一下,怎么让复选框效果回显出来。这是最后复选框只能选择一个的效果。 阅读详情
AI摘要

本文介绍如何在Element UI中处理对象数据绑定的复选框问题,通过创建新数组并监听变化,实现在全选和多选控制中的数据同步,避免直接修改源码带来的维护难题。

最近在开发过程中使用elementUI时,用到了复选框checkBox,但是因为绑定的数据是对象,无法做到数据的回显。然后又回头仔细的查看的文档,发现文档中介绍说checkBox和checkGroup通过v-model绑定的数据只能是number/string/Array,不支持绑定对象数据的。
图1

图2
之后在百度一番过后,发现百度上的提供的方法大多数都是直接去修改elementUI的源码,然后重新打包,将打包的elementUI源码放入到项目中实现checkBox对对象数据的支持,但是这样的话,我个人认为会出现一个问题,那就是项目在迭代更新的过程中会不断的进行打包操作,如果删除了node_modules文件夹,那么就需要重新将打包好的修改过的elementUI源码包再次放入到项目中去,会有一些不方便。那么,我自己思考了一番以后,对这个问题拥有了一个解决方案,在这里做一个记录,也方便各位码友进行参考和补充。
我的想法是:既然checkBox不支持对象,那么我们在通过v-model进行绑定的时候就不要绑定对象数据了可以再定义数据,然后绑定,将源数据中的对象的name或者其他不会相同的数据通过label绑定将数据放入这个新的数组中去,然后通过change时间,将遍历到的数组中的对象传递出去,放入到想要获取到的那个数组中去,具体情况看如下代码:

<template>
    <div>
         <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
            <div style="margin: 15px 0;"></div>
            <div v-for="city in cities" :key="city.name">
              <el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange(city)">
                  <el-checkbox :label="city.name">{{city.name}}</el-checkbox>
              </el-checkbox-group>
            </div>

        </div>
</template>
<script>
const cityOptions = [
    {
        id:1,
        name:'北京'
    },
    {
        id:2,
        name:'上海'
    },
    {
        id:3,
        name:'广州'
    }
]
  export default {
    beforeMount(){
        console.log('挂载前',this.checkedCities);
    },
    data() {
      return {
        checkAll: false,
        checkedCities: ['上海', '北京'],
        checkedCities2:[
            {
                id:2,
                name:'上海'
            },
            {
                id:3,
                name:'广州'
            }
        ],
        cities: cityOptions,
        isIndeterminate: true
      };
    },
    methods: {
      handleCheckAllChange(val) {
        this.checkedCities = val ? cityOptions : [];
        this.isIndeterminate = false;
      },
      handleCheckedCitiesChange(value) {
        console.log('选中的value',value.name);
        // let checkedCount = value.length;
        // this.checkAll = checkedCount === this.cities.length;
        // this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length;
        if(this.checkedCities2.indexOf(value) === -1){
          this.checkedCities2.push(value)
        }else{
          this.checkedCities2.splice(this.checkedCities2.indexOf(value),1)
        }
        console.log('打印数组',this.checkedCities);
        console.log('打印数组222',this.checkedCities2);
      }
    }
  };
</script>

2023年8月11号,有码友指出说做不到全选的控制,我在这里做了一个优化,使其能够做到多选控制,并且在优化过程中,发现了其他一些bug,同时进行了处理。也感谢这位码友对我书写内容的建议。优化后的代码如下:

<template>
  <div class="test">
       <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
          <div style="margin: 15px 0;"></div>
          <div v-for="city in cities" :key="city.name">
            <el-checkbox-group v-model="checkedCities1" @change="handleCheckedCitiesChange(city)">
                <el-checkbox :label="city.name">{{city.name}}</el-checkbox>
            </el-checkbox-group>
          </div>

      </div>
</template>
<script>
//模拟数据
const cityOptions = [
  {
      id:1,
      name:'北京'
  },
  {
      id:2,
      name:'上海'
  },
  {
      id:3,
      name:'广州'
  }
]
export default {
  beforeMount(){
    //挂载前先判断是否有值
    if(this.checkedCities1.length === 0) { //没有值的情况下,全选和其他内容的勾选都是为空的
      this.checkAll = false
      this.isIndeterminate = false
    }else{
      this.checkedCities1.forEach((name) => { //如果有值的情况下,要把对象放到数组2中,因为设想的情况就是从接口拿到就是一个对象
        this.cities.forEach((city) => {
          if(name == city.name) this.checkedCities2.push(city)
        })
      })
    }
  },
  data() {
    return {
      checkAll: false,
      checkedCities1: ['上海', '广州'],
      checkedCities2:[],
      cities: cityOptions,
      isIndeterminate: true
    };
  },
  methods: {
    handleCheckAllChange(val) {
      if(val) { //如果全选为true,要把所有的name放到数组1中
        this.checkedCities1 = []
        this.checkedCities2 = []
        cityOptions.forEach((city) => {
          this.checkedCities1.push(city.name)
          this.checkedCities2.push(city)
        })
      }else {//如果全选为false,要把数组1和数组2都置空
        this.checkedCities1 = []
        this.checkedCities2 = []
      }
      this.isIndeterminate = false
    },
    handleCheckedCitiesChange(value) {
      if(this.checkedCities2.indexOf(value) === -1){//选择了多选项以后,判断数组2有没有包含,没有就添加进去
        this.checkedCities2.push(value)
        if(this.checkedCities2.length === cityOptions.length) { //数组2的长度等于源数据的长度,全选要加上勾选
          this.checkAll = true
          this.isIndeterminate = false
        }else if(this.checkedCities2.length != 0){//数组2不能等于源数据长度,全选是横杆的状态,这里因为是添加,所以肯定不会有0出现
          this.checkAll = false
          this.isIndeterminate = true
        }
      }else{
        this.checkedCities2.splice(this.checkedCities2.indexOf(value),1)
        if(this.checkedCities2.length < cityOptions.length ) {//数组2删除数据时,判断数组2长度小于源数据长度,全选是横杆的状态
          if(this.checkedCities2.length === 0){//数组2长度等于0,全选要变成未选的空白状态
            this.checkAll = false
            this.isIndeterminate = false
            return
          }
          this.checkAll = false
          this.isIndeterminate = true
        }
      }
      console.log('打印数组checkedCities',this.checkedCities1);
      console.log('打印数组checkedCities2',this.checkedCities2);
    }
  }
};
</script>

<style lang="scss" scoped>
.test{
  display: flex;
  justify-content: center;
  align-items: center;
  margin-top: 25%;
}
</style>

以上就是我想到的解决方案,还请各位码友多多指教。

关于解决elementUI组件el-checkbox-group无法绑定对象数组的问题 关于解决elementUI组件el-checkbox-group无法绑定对象数组的问题1.把 element 源码克隆到本地2.安装依赖3.查找文件4.替换代码5.重新打包 1.把 element 源码克隆到本地 git clone https://github.com/ElemeFE/element.git 或者下 zip 包 https://github.com/ElemeFE/element 2.安装依赖 npm install 或 cnpm install 3.查找文件 文件目录:packages\ 阅读详情

相关推荐

【UG/NX二次开发】记录在二次开发中遇到的坑

【UG/NX二次开发】记录在二次开发中遇到的坑

Trust_MJ的博客 2707

关于ElementUI的CheckBox多选框数据回显

获取的数据值进行匹配,如果相同就会数据回显,显示已选。因为ElementUI已经封装好了,会自动匹配。数据需要和label标签值相同才能数据回显。例如上图,需要回显已选的数据。点击分配,则会显示回显的数据。

JackMa的博客 6603

从原理图到PCB:手把手教你绘制DRV8301驱动板(附完整代码与避坑指南)

本文详细介绍了如何从原理图设计到PCB布局,手把手教你绘制DRV8301驱动板,特别适用于FOC(磁场定向控制)系统开发。内容涵盖元器件选型、电源树架构设计、栅极驱动电路、PCB布局技巧、焊接调试及代码配置,并附有完整代码与常见问题避坑指南,帮助工程师快速掌握DRV8301驱动板的设计与优化。

weixin_33716941的博客 396

vue+element-ui实现多选框绑定数组对象

来看这段代码: <template> <el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange"> <el-checkbox v-for="city in cities" :label="city" :key="city">{{city}}</el...

GeZiMm的博客 2万+

CVPR 2027 投稿规划:基于近3年录用率与截稿周期的5步时间管理法

本文为计算机视觉研究者提供CVPR 2027投稿的完整规划指南,基于近三年录用率与截稿周期数据,提出五步时间管理法。涵盖选题策略、实验设计、论文写作、同行评审到最终提交的全流程优化,特别针对CVPR日益激烈的竞争环境(2024年投稿量达11532篇,录取率仅23.6%)提供实用解决方案,帮助研究者提升投稿成功率。

weixin_34079177的博客 1157

【深度解析】信息素养提升实践活动(附:历年获奖作品分析)

全国师生信息素养提升实践活动是由教育部教育技术与资源发展中心(中央电化教育馆)主办,面向全国师生的一项信息化交流展示活动。

m0_74417957的博客 9652

el-checkbox / el-checkbox-group中绑定对象无法回显的问题处理

同时该操作也可同用于el-checkbox-group如有疑问,欢迎讨论......_el-checkbox绑定对象。在使用el-checkbox / el-checkbox-group时,发现若label绑定的是对象,则是无法回显的,参考了很多方法,但大多都无法解决,最终参考下面的方法解决,记录一下。参考:el-checkbox绑定Object/Array解决方法(同附el-checkbox-group解决方法)_el-checkbox绑定对象_奈登里的博客-优快云博客。

3086

告别手册!S32K3XX的eMIOS实战:从GPT定时到PWM输出,一个通道搞定电机控制

本文深入探讨了NXP S32K3XX系列MCU的eMIOS模块在电机控制中的高效应用。通过单通道实现PWM生成、输入捕获和定时中断三大功能,展示了如何简化BLDC电机控制硬件设计。文章结合RTD库与寄存器级编程,提供动态模式切换和性能优化方案,显著降低CPU负载。

weixin_42522374的博客 147

解决 el-checkbox-group 值为对象的时候 复选框回显问题

先上一个例子 <template> <el-checkbox-group v-model="checkedCities" :min="1" :max="2"> <el-checkbox v-for="city in cities" :label="city" :key="city">{{city}}</el-checkbox> </el-checkbox-group> </template>

qcg14774125的博客 1万+

计算机视觉之ResNet

RestNet是2015年由微软团队提出的,在当时获得分类任务,目标检测,图像分割第一名。该论文的四位作者何恺明、张祥雨、任少卿和孙剑如今在人工智能领域里都是响当当的名字,当时他们都是微软亚研的一员。实验结果显示,残差网络更容易优化,并且加深网络层数有助于提高正确率。在ImageNet上使用152层的残差网络(VGG net的8倍深度,但残差网络复杂度更低)。对这些网络使用集成方法实现了3.75%的错误率。获得了ILSVRC 2015竞赛的第一名。原文链接这是一篇计算机视觉领域的经典论文。

十年以上架构设计经验,专注于软件架构和人工智能领域,对机器视觉、NLP、音视频等领域都有涉猎 2万+

GitHub霸榜神器!NextChat领衔DeepSeek全栈开发范式

NextChat(原ChatGPT-Next-Web)是GitHub上斩获81.2K星标的现象级开源项目,定位为"轻量级AI助手终端",支持DeepSeek、Claude、GPT-4、Gemini等20+主流大模型。• 原生集成DeepSeek、GPT-4、Gemini Pro等模型API,同时兼容RWKV-Runner、LocalAI等自建模型框架,通过环境变量。• 客户端体积仅5MB(Windows安装包约6MB),采用PWA渐进式Web应用技术,首屏加载速度优化至100KB级,老旧设备亦可流畅运行。

实战AI智能体 894

vue <el-checkbox-group>多选框回显

vue多选框回显问题

toString的博客 3040

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

复选框绑定对象

复选框绑定对象

啊哈的博客 2254

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

el-checkbox-group绑定值与回显

checkListData:[];//多选框里要显示的数据 checkListDataStr:"", checkList:[ {propCode:"01",propName:'测试1'}, {propCode:"02",propName:'测试2'}, ] <el-checkbox-group v-model="checkListData" > <el-checkbox v-for="item in checkList"

weixin_44876807的博客 6640

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

element el-checkbox-group 多选回显

因为ElementUI已经封装好了,会自动匹配el-checkbox-group中v-model的数据和el-checkbox中v-for获取的数据值进行匹配,如果相同就会数据回显,显示已选。在el-checkbox-group的v-model数据需要和label标签值相同才能数据回显。

weixin_43962877的博客 1068

el-checkbox-group绑定数据为对象的回显问题

element官方文档中el-checkbox-group组件绑定的是基础数据类型(string / number / boolean),但是最近开发项目过程中需要绑定数组对象结构的数据,那么在后端返回数据的时候是没办法在多选框回显的。 测试代码如下: <template> <el-checkbox-group v-model="textdata">   <el-checkbox v-for='(item, index) in textlist' :label="item"

wilsonfzh的博客 6797

【日常bug记录】el-checkbox 绑定对象数组

是双向绑定的值,也就是选中之后传到表单数据里面的值,一般设置为。标签内部再使用插值表达式写上多选框框里面要显示的属性就可以了。这个写法很怪异哦,但确实管用。

weixin_45855469的博客 1195

elementui checkbox使用 以及结合后台 回显

页面: 前端: <el-col :span="24"> <el-form-item label="办公环境" prop="officeEnvironment"> <el-checkbox-group v-model="form.officeEnvironment"> <el-checkbox v-for="(item,index) in officeEnvironmentLis

一株木樨的博客 3643

在使用el-checkbox复选框编辑、回显时碰到的坑

根据后端要求,需要传递id过去,即‘1,2,3’这种的格式,但是el-checkbox复选框打印出来的结果是[‘美食’,‘玩具’,‘家具’]这种数组样式的,所以需要用label绑定的是id值。此时选择复选框的时候change打印出来的是符合要求的,但是在回显编辑的时候,再次选择其他复选框的时候,无法进行勾选。其中e为true,意思是选中了当前的选项,item是传递过来的id及其name值,这样同样也解决了编辑回显时再次选择的问题。这样就解决了,编辑回显时再次选择的问题。选中则放进数组,取消选中则删除它。

dawang18232123的博客 2293

el-checkbox复选框回显的坑、传参数据格式

回显复选框内容后,无法修改或者点击的情况

weixin_43367044的博客 2867

Element-ui框架checkbox复选框全选加回显功能

Element-ui框架checkbox复选框全选加回显功能 <template> <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange" >全选</el-checkbox> <el-checkbox-group v-model="checkedCities" @c

靓仔豪吖的博客 2066

原创:vue使用elementUI的复选框el-checkbox-group与el-checkbox回显失效问题解决!!

一、场景: 用户表——角色表,用户管理界面可以选择角色,并且每次初始化时候支持“回显”,如图: 使用elementUI的复选框组合: el-checkbox-group el-checkbox 二、上代码: 1. 整体结构(列表页和详情页): 2. detail页面的组件Info: <el-checkbox-group v-model="chooseRoleNames"> <el-checkbox v-for="(item,index) in totalR

HD243608836的博客 1万+

Vue <el-checkbox-group>多选框回显问题

关于Vue <el-checkbox-group>多选框回显的细节问题

正在努力~ 1458

element el-checkbox-group 回显对象数据

element el-checkbox-group 回显对象数据

weixin_44021888的博客 1504

el-checkbox-group选择之后没有回显,只是选框变色问题

问题出在v-model绑定的数组上,当我们绑定的数组不是在data中定义,而是后期添加的,比如后端返回的list,我们遍历后给item添加一个checkList=[],作为v-model绑定对象,那么view就不会收到更新的通知;解决方法就是,先处理后端返回的数据,然后再赋值给绑定的变量。

q879936814的博客 2916
上一篇: 原生微信小程序踩坑(三)------ 活动类的使用
下一篇: uniapp实现的类似于微信的字母滑动索引效果
“蓬蒿人”
博客等级 码龄7年 23粉丝 13原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值