关于element-tree,解决id相同如何回显,同样的id只能选中一个的坑!!!!

这篇具有很好参考价值的文章主要介绍了关于element-tree,解决id相同如何回显,同样的id只能选中一个的坑!!!!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

因为最近一直在跟学校合作,所以在开发的过程中,遇过了这么一个坑:【因为学校的老师可能身兼不同的职位,年级主任也可以兼任班主任,所以就会存在一个人在不同的部门,但是element-tree默认需要唯一值,也就是说,id不能一样。所以现在的情况就是勾选部门A的老师A,但是部门B的状态没有改变,会导致被覆盖,只能勾选中一个。包括回显的时候只显示某一个的老师A是勾选状态,其他部门下的老师A仍然是未被勾选的状态】想了想,这种情况应该在多种领域都存在,所以想记录保存一下,我会把我自己解决问题的代码附上,仅供参考,如果大家还有其他合适的方法,也可以讨论一下。(网上查了一下,有改源码的,我不太建议这么做。)

二、需要解决的问题及思路

目前要解决两个问题:

1、勾选的时候id相同的都要勾选上,反之也一样。

2、后台数据返回默认勾选的的id数组时,id相同的都被勾选。

思路:

因为id相同,所以element-tree没有唯一值,我们需要将数据遍历,给每一条数据添加一个新的字段key,形成新的list,给tree一个node-key。在选中的时候,遍历数组,查询id相同的节点并取出key值组成新的数组checkedList,我们运用element-tree的方法setChecked,来改变当前id相同的节点的选中状态。

保存的时候,因为我们需要给后台传递老师的id数组,但是我们取到的是key值数组,我们需要获取当前选中的节点,此时数组中肯定是有重复的,我们还需要去重。

三、代码

1、首先在vue里面封装一个方法eachTreeData,我是放在了utils文件夹下的util.js文件里,方便后期使用。可遍历children形式的数据,(因为后台返回给我的数据时children形式的)

    /**
     * 遍历children形式数据
     * @param data 需要遍历的数组
     * @param callback 回调
     * @param childKey children字段名
     */
        eachTreeData(data, callback, childKey) {
        if (!childKey) childKey = 'children';
        data.forEach(d => {
            if (callback(d) !== false && d[childKey]) this.eachTreeData(d[childKey], callback, childKey);
        });
    }

2、页面代码

<el-tree ref="teacherTree" :data="teacherList" :props="{ label: 'name' }"
                 node-key="key" show-checkbox :default-expanded-keys="teacherListNode" :default-checked-keys="checkedList" @check-change="setTeacherChecked"/>

3、js代码(methods方法)

data(){
    teacherList:[],//部门教师树
    teacherListNode:[0],//默认展开的节点,因为重新添加字段,所以写死默认打开第一级
    checkedTeacherList:[],//后台返回的默认选中的id数组
    checkedList:[],//选中的key数组
    params:{//提交的数据
        teacherIds:[]
    }
}
methods:{
    //获取部门教师树
    getTeacherList:{
        //假设我们已经获取到List,通过axios获取
        this.addKeyToList(this.teacherList)//遍历数据,给节点添加key(唯一值)
    }
    //给树的每一个节点 添加一个key(唯一值),并算出默认选中的节点key数组
    addKeyToList(data){
        let key = 0;
        this.$util.eachTreeData(data, (d) => {
           d.key = key++
        })//遍历数据给每一个node添加一个key
        this.checkedList = this.contrastList(data)//对比相同id的节点并获取key数组
    },
    //对比后台传回来默认选中的checkedTeacherList,返回checkedList
    contrastList(data){
        this.$util.eachTreeData(data, (d) =>{
        this.checkedTeacherList.forEach((item) => {
          //id相同就push一个key
          if(item == d.id){
            checkedList.push(d.key)
          }
        })
      })
      return checkedList
    },
    //点击节点,判断该节点id是否有重复的,如果有相同id执行相同的操作(选中或取消选中)
    setTeacherChecked(data,isChecked){
      this.$util.eachTreeData(this.teacherList, (item) => {
        if(data.id === item.id){
          this.$refs.teacherTree.setChecked(item.key,isChecked,false)
        }
      })
    },
    //保存提交
    saveTeacher(){
        let  teacherIds = this.$refs.teacherTree.getCheckedNodes()//获取选中的节点数据
        teacherIds.forEach((item) => {//遍历获取教师id
            this.params.teacherIds.push(item.id)
        })
        this.fileParam.teacherIds = [...new Set(this.fileParam.teacherIds)]//去重
        //提交!
    },
}

四、总结

大概就是这么个情况,主要还是为自己记录一下,如果大家也有类似的问题,希望这篇文章能够帮助你,代码应该挺好理解的,有什么不懂的可以在评论区提问,看到就会回答了。谢谢~文章来源地址https://www.toymoban.com/news/detail-491091.html

到了这里,关于关于element-tree,解决id相同如何回显,同样的id只能选中一个的坑!!!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【解决element ui 富文本回显 p 标签问题】

    问题描述:使用ruoyi-plus ui 的前端框架富文本控件editor进行数据提交,提交上去的内容回显带有HTML 的 p 标签,而我们想要去掉 p 标签这时就要清空提交的HTML标签。 我们想要去除内容旁边的 p 标签这时就可以使用正则表达式来讲HTML的内容进行替换更改,在vue method中进行定义

    2024年02月13日
    浏览(80)
  • 关于element ui 安装失败的问题解决方法、查看是否安装成功及如何引入

    执行 npm i element-ui -S 报错 原因:npm版本太高 报错信息: 解决办法: 使用命令:  npm install --legacy-peer-deps element-ui --save 引入: 在main.js文件中引入 执行 npm install element-plus --save 报错 解决办法: 使用命令: npm install element-plus --save --legacy-peer-deps   引入: 在main.js文件中引入

    2024年02月15日
    浏览(83)
  • element-ui时间日期选择器回显功能以及不能修改问题的解决

    地址:element-ui时间日期选择器不能修改问题的解决 - 走看看 属于是强制更改 编辑的时候,修改了时间,控制台中能看到已修改,可是页面上确没修改而且也不能删除,出现这样的问题,该如何解决? 解决方案:在获取数据回显的时候使用$set: 刚开始是直接赋值(如果不是标

    2024年02月11日
    浏览(33)
  • element ui中el-table的合并相同列内容的解决方法,简单实用

    element ui中el-table的合并相同列内容的解决方法,简单实用 废话不说,直接上代码,vue页面中的几个部分如下: 注意几点: 1、el-table中 写上: :span-method=“objectSpanMethod” 2、两个方法不用改动 3、想合并哪列,在data中columnArr数组里填上列名。 4、如果有bug,自己去调整吧 完事

    2024年02月11日
    浏览(38)
  • 关于PADS铺铜时,相同网络的GND焊盘不能和GND铜皮连接的解决方法

    如上图所示,GND焊盘和铜箔明明是相同的网络,在进行铺铜操作后,铜箔不能覆盖焊盘并且直接当成不同的网络避开了。 实际是在设计工程中,未将该引脚的焊盘属性设置为热焊盘导致。 1.选择焊盘并右键选择特性 将管脚属性的平面层热焊盘勾选上,问题解决。    可看出

    2024年02月12日
    浏览(90)
  • el-select值的回显问题:如何使element-ui的下拉框显示label值

    今天写前端又遇到个很神奇的事情,element的下拉框el-select出现了一点儿问题,回显的时候显示value的值,这个强迫症看来就很难受  我写的代码是这样的 查阅大量资料,突然发现一个简单的方法,那就是vue的v-bind的神奇之处,v-bind的简写是:冒号 所以解决方法就来了(敲重

    2024年02月07日
    浏览(36)
  • el-tree-select树形选择 数据回显

    由于用到懒加载,与一次性全部加载数据不同的是,当前只有ID,而树结构还没渲染,就会导致没有label回显。所以我们要在组件刚渲染的时候,就构造我们想要的树节点。 node-key=\\\"id\\\" 和 :default-expanded-keys=\\\"[form4.positionNo]\\\" (默认展开的节点的 key 的数组) 和 :default-checked-keys=

    2024年02月14日
    浏览(29)
  • 【vue2+element ui】添加修改共用表单的下拉框回显问题分析以及解决方案(附共用表单代码)

    简介 本人前端水平不佳,本文分享在编写个人项目前端代码的时候遇到的回显问题的解决办法,仅供参考。 问题复原 首先展示表单中的问题代码,本次前端的设计是添加和修改操作共用表单,但是其中有一个下拉框展示形式,按照惯例通过:value进行双向绑定,保证点击修改

    2024年02月07日
    浏览(33)
  • 【前端】- 在使用Element UI 的el-tree组件时,从底层去研究如何去实现一键展开/关闭【tree节点】的功能

    点击前效果: 点击后效果: 页面部分:这里是简单的数结构渲染,不多讲,$refs.Reftree获取的是el-tree的实例,具体作用请看下面的方法。 方法部分:该方法传入el-tree实例,直接点击按钮即可实现展开或者关闭,这里简单讲解一下 1、ref.store.root.childNodes 通过实例来调用tree组

    2024年04月16日
    浏览(41)
  • Element中的el-table中如何获取每一行的id

    只需要用 template slot-scope=\\\"scope\\\"/template 标签包裹起来即可 使用 scope.row.列名, 的方式获取当前行对应列的值  可以通过使用 作用域插槽 的方式获取每一行的id。以下是一个示例代码: 以下是一个示例代码: 

    2024年01月23日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包