Antd的Tree 树形控件实现单选与获取选中后的父元素目录

Antd的Tree 树形控件实现单选与获取选中后的父元素目录

实现目标:

a-tree在使用时,需求有单选的功能,以及在选中后,获取子元素的父元素名称及信息,而antd 组件给定的方法中,并不能够直接获取父元素信息,官网的解释是出于性能考虑。

实现过程
        <a-tree v-model="checkedKeys" checkable :auto-expand-parent="autoExpandParent" 
        :selected-keys="selectedKeys"  :tree-data="treeData" @check="onCheck" 
        :replaceFields="replaceFields" />

oncheck方法是目录树自带的,在点击复选框时触发,主要是先获取到check函数的info对象,info对象中有很多内容,我们需要的内容有:
info:

  1. checked:是否选择项,为true时选中,可以操作数据存入,为false时未选中或取消选中,此时可做单选数组的清空
  2. checkedNodes:获取到的子节点信息 ,包括有:data:子节点所有的信息都能在data中找到,一般 存在data.props中
  3. checkedNodesPositions:数组形式存储选中的子节点位置数组的最后一位,永远是存放刚刚勾选的子节点 的,[包括有:pos:按照所 在数组的索引来分,格式为0-0-0的格式,所以我们在使用pos获取父元素位置时,需要先按照“-”来分割字符串,获取到位置数组]
  //目录树选中节点
    onCheck(checkedKeys, info,) {
      // 单选模式
      if (this.parentTreecheckedKeys.type == "single") {
        if (info.checked) {
          // 选中时子目录的id与名称
          this.checkedKeys = [].concat(
            checkedKeys[checkedKeys.length - 1])
          this.objSingleData.checkedName =
            info.checkedNodes[info.checkedNodes.length - 1].data.props.text;
            
            
          // 获取父目录名称
          let length = info.checkedNodesPositions.length //获取选中的子目录存储位置长度
          let popArr = info.checkedNodesPositions[length - 1].pos.split("-") //获取选中的子目录所在位置并切割成数组
          popArr.shift()
          this.objSingleData.checkedParentName = this.getParentNodes(popArr, this.treeData)
        } else {
             this.objSingleData.checkedId  = []
          this.objSingleData.checkedName = "";
          this.objSingleData.checkedParentName = ''
        }
        return false;
      }
       }

   // 获取父目录  nodesArr为节点位置数组,treeData为目录树数据
    getParentNodes(nodesArr, treeData) { //
      let node = []
      let objParentNodes = "" //存放父节点名称
      node = treeData[nodesArr[0]].ChildNodes[nodesArr[1]]   //这里的逻辑可根据需求写成循环获取,
      objParentNodes = node.text
      return objParentNodes
    },

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值