element树组件el-tree默认选中展开某些节点

1.需求
在这里插入图片描述
比如像这种需求,他这是点击某个节点时发送请求,然后获取他下面的子节点,把子节点追加上去,但是呢,如果只追加不默认展开的话就会有个问题,就是点击了,子元素追加了,但是没展开,就导致我需要手动点两次展开,用户体验不好
1.在template中:

<el-tree
  class="secondTree-tree haveChild"
  :data="treeData"
  node-key="classCode"
  highlight-current
  ref="menuTree"
  :props="defaultProps"
  style="overflow: scroll;"
  :style="{height: treeHeight + 'px'}"
  @node-click="handleNodeClick"
  :default-expanded-keys="defaultShowKeys" // 写个数组默认装展开节点的id,唯一标识,就是上面的node-key
>
  <span class="custom-tree-node" slot-scope="{ node, data }" @mouseover="treeMouseOver($event, data)" @mouseleave="treemouseLeave($event, data)" style="width: 100%;">
    <span class="tree-nood">{{ node.label }}</span>
    <span style="position: absolute;right: 0;" class="node-none" id="showhidden">
      <el-tooltip effect="dark" content="新增" placement="top" style="margin-left: 8px;">
        <span v-show="data.validFlag==='1' && data.showflag">
          <el-button
            type="text"
            size="mini"
            class="iconfont purchmanager-button-add"
            v-privilege="activeMenu + 'parentTreeNode'"
            @click="() => parentTreeNode(node, data, '1')">
            <icon-svg icon-class="iconjia1" />
          </el-button>
        </span>
      </el-tooltip>
      <el-tooltip effect="dark" content="修改" placement="top">
        <span v-show="data.validFlag==='1'">
          <el-button
            type="text"
            size="mini"
            class="iconfont purchmanager-button-edit"
            v-privilege="activeMenu + 'openEditWindow2'"
            @click="() => openEditWindow('2', data)">
            <icon-svg icon-class="iconbianji" />
          </el-button>
        </span>
      </el-tooltip>
      <el-tooltip effect="dark" content="停用" placement="top">
        <span v-show="data.validFlag==='1'">
          <el-button
            type="text"
            size="mini"
            class="iconfont purchmanager-button-stop"
            v-privilege="activeMenu + 'userStop1'"
            @click="() => userStop('stop', data)">
            <icon-svg icon-class="iconshanchu" />
          </el-button>
        </span>
      </el-tooltip>
      <el-tooltip effect="dark" content="启用" placement="top">
        <span v-show="data.validFlag==='0'">
          <el-button
            type="text"
            size="mini"
            class="iconfont purchmanager-button-use"
            v-privilege="activeMenu + 'userStop2'"
            @click="() => userStop('use', data)">
            <icon-svg icon-class="iconqiyong" />
          </el-button>
        </span>
      </el-tooltip>
    </span>
  </span>
</el-tree>

2.在data中:

data () {
	defaultShowKeys: [],
	defaultProps: {
      children: 'children',
      label: 'classDesc'
    },
    classDesc: ''
}

3.在methods中:

methods: {
  // 获取最外层父级元素
  doQuery () {
      let _this = this
      _this.axios.get('xxx/xxx/xxx/?classDesc=' + this.classDesc).then(function (res) {
        if (res.code === '0') {
          _this.treeData = res.data
          _this.treeData.forEach(item => {
            item.checkedflag = false // 默认添加一个属性,用于记录它的点击状态
            item.showflag = true
            item.children = []
          })
        }
      }).catch(function () {
      });
    },
	handleNodeClick (data) {
      let _this = this
      data.checkedflag = !data.checkedflag
      let params = {
        pageNum: 1,
        pageSize: 100000,
        parentCode: data.classCode,
        parentDesc: data.classDesc // 父类名称
      }
      _this.axios.get('xxx/xxx/xxx', {params: params}).then(function (res) {
        if (res.code === '0') {
          let tree = res.data.list
          tree.forEach(item => {
            for (let index in data.children) {
              if (item.classCode === data.children[index].classCode) {
                // _this.$refs.menuTree.remove(data.children[index])
                // _this.$refs.menuTree.append(item, data);
                return false;
              }
            }
            item.checkedflag = false
            _this.$refs.menuTree.append(item, data);
            let node = _this.$refs.menuTree.getNode(item)
            if (node.parent.parent.data.constructor === Array) {
              item.showflag = true
            } else if (node.parent.parent.data.constructor === Object) {
              // 如果祖父是对象就是第三级了,那么就不允许再新增
              item.showflag = false
            }
          })
          let arr = []
          if (data.children.length === 0) {
            data.checkedflag = false
          } else {
            if (data.checkedflag) { // 如果点击的状态是true,那么就存到数组里
              for (let index in _this.defaultShowNodes) {
                if (data.classCode === _this.defaultShowNodes[index]) {
                  // 如果已经存在就跳过
                  return false
                }
              }
              _this.defaultShowNodes.push(data.classCode)
            } else {
              // 如果是false,证明点击的是关闭,那么找到这个,从数组中删除
              _this.defaultShowNodes.forEach((item1, index) => {
                if (item1 === data.classCode) { // 判断当前节点是否存在, 存在就添加到要删除的数组里
                  arr.push(item1)
                }
                if (data.children.length > 0) {
                // 要判断儿子有没有展开的,如果儿子有展开的就要删除掉,否则,儿子的还是展开状态,父亲、爷爷辈的也会被展开,
                  for (let index in data.children) {
                    if (item1 === data.children[index].classCode) {
                      arr.push(item1)
                      return false;
                    }
                  }
                }
              })
            }
          }
          arr.forEach(item4 => {
            for (let index in _this.defaultShowNodes) {
              if (item4 === _this.defaultShowNodes[index]) {
                _this.defaultShowNodes.splice(index, 1)
                return false;
              }
            }
          })
        }
      }).catch(function () {
      });
    },
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
根据引用\[1\]中的描述,对于element-plus中的el-tree组件默认选中第一个节点可以通过设置default-checked-keys属性来实现。你可以将default-checked-keys属性绑定到一个数组,数组中的元素是你想要默认选中节点的key值。例如,你可以将default-checked-keys设置为\[this.arr\[0\].key\]来默认选中第一个节点。 另外,根据引用\[2\]中的代码示例,你可以通过设置props属性来指定el-tree组件的数据结构。在defaultProps对象中,你可以设置children属性和label属性来指定子节点和标签的字段名。 综上所述,你可以尝试在el-tree组件上设置default-checked-keys属性为\[this.arr\[0\].key\]来默认选中第一个节点,并使用props属性来指定数据结构。希望这能帮到你。 #### 引用[.reference_title] - *1* [VUE element-ui 组件 el-tree 默认选中渲染问题](https://blog.csdn.net/qq_44774831/article/details/119698975)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [element-plus el-tree使用](https://blog.csdn.net/m0_53266704/article/details/125557151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值