• vue中element-ui 树形控件-树节点的选择(选中当前节点,获取当前id并且获取其父级id)


    出处:

    https://blog.csdn.net/weixin_42677017/article/details/83043224

    Element-ui官网给的方法

    getCheckedKeys() { console.log(this.$refs.tree.getCheckedKeys()); },
    
    • 1

    这种只有在所有子级都被选中的情况下才能获得父级的id,如果不选中所有的子级那么获取得到的id就只有子级的。但是一般提交数据时后台都需要父级id的。
    有两种方法解决:

    1. 1 ,找到项目中的 ode_moduleselement-uilibelement-ui.common.js文件
    2. 2,搜索文件中的TreeStore.prototype.getCheckedNodes方法中的
    if (child.checked && (!leafOnly || leafOnly && child.isLeaf)) {
              checkedNodes.push(child.data);
            }
    
    • 1
    • 2
    • 3
    1. 3,修改为
    if ((child.checked || child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {
              checkedNodes.push(child.data);
            }
    
    • 1
    • 2
    • 3
    1. 4,然后重启项目
      console.log(this.$refs.tree.getCheckedKeys());就可以拿到父节点的ID啦
    2. 第二种方法:复制代码

    代码:要有pid:xxx

     methods: {
          getCheckedNodes() {
            var rad=''
            var ridsa = this.$refs.tree.getCheckedKeys().join(',')// 获取当前的选中的数据[数组] -id, 把数组转换成字符串
            var ridsb = this.$refs.tree.getCheckedNodes()// 获取当前的选中的数据{对象}
            ridsb.forEach(ids=>{//获取选中的所有的父级id
              rad+=','+ids.pid
            })
            rad=rad.substr(1) // 删除字符串前面的','
            var rids=rad+','+ridsa
            var arr=rids.split(',')//  把字符串转换成数组
            arr=[...new Set(arr)]; // 数组去重
            rids=arr.join(',')// 把数组转换成字符串
            console.log(rids)
          }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    测试代码

    <template>
      <div>
        <el-tree
      :data="data2"
      show-checkbox
      default-expand-all
      node-key="id"
      ref="tree"
      highlight-current
      :props="defaultProps">
    </el-tree>
    
    <div class="buttons">
      <el-button @click="getCheckedNodes">获取</el-button>
      <el-button @click="resetChecked">清空</el-button>
    </div>
      </div>
      </template>
      <script>
      export default {
       methods: {
          getCheckedNodes() {
            var rad=''
            var ridsa = this.$refs.tree.getCheckedKeys().join(',')// 获取当前的选中的数据[数组] -id, 把数组转换成字符串
            var ridsb = this.$refs.tree.getCheckedNodes()// 获取当前的选中的数据{对象}
            ridsb.forEach(ids=>{//获取选中的所有的父级id
              rad+=','+ids.pid
            })
            rad=rad.substr(1) // 删除字符串前面的','
            var rids=rad+','+ridsa
            var arr=rids.split(',')//  把字符串转换成数组
            arr=[...new Set(arr)]; // 数组去重
            rids=arr.join(',')// 把数组转换成字符串
            console.log(rids)
          },
          resetChecked() {
            this.$refs.tree.setCheckedKeys([]);
          }
        },
    
        data() {
          return {
            data2: [{
              pid:0,
              path:xxxx,
              id: 1,
              label: '一级 1',
              children: [{
                pid:1,
                path:xxxx,
                id: 11,
                label: '二级 1-1'
              },
              {
                pid:1,
                path:xxxx,
                id: 12,
                label: '二级 1-2'
              },
              {
                pid:1,
                path:xxxx,
                id: 13,
                label: '二级 1-3'
              }]
            }],
            defaultProps: {
              children: 'children',
              label: 'label'
            }
          };
        }
      };
    </script>
      </script>
      <style scoped>
      </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77

    如果是三级或者是多级,响应的数据格式必须要有’path:xxxx’,这样才能获取其父级id
    响应的数据格式

    {
      "data": [
          {
              "id": 30,
              "path": xxxx,
              "children": [
                  {
                      "id": 101,
                      "path": xxxx,
                      "children": [
                          {
                              "id": 104,
                              "path": xxxx,
                              "children": [
                                  {
                                      "id": 105,
                                      "path": xxxx
                                  }
                              ]
                          }
                      ]
                  }
              ]
          }
      ],
      "meta": {
          "msg": "获取成功",
          "status": 200
      }
    }
  • 相关阅读:
    C#使用Xamarin开发可移植移动应用(5.进阶篇显示弹出窗口与通讯中心)附源码
    C#使用Xamarin开发可移植移动应用(4.进阶篇MVVM双向绑定和命令绑定)附源码
    C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码
    C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
    C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码
    ASP.NET Core之跨平台的实时性能监控(2.健康检查)
    Android Studio 快捷键:重载与重写、try catch代码块、导包 快捷键
    新版本jQuery对动态添加元素绑定点击事件实例
    ssm框架中,mybatis的sql语句日志输出
    maven环境下的ssm框架上传excel 案例
  • 原文地址:https://www.cnblogs.com/DIVEY/p/13689975.html
Copyright © 2020-2023  润新知