element-ui中tree组件选择子节点,如何默认选中所有父级节点

4 篇文章 0 订阅

在做角色权限配置这块,用element-UI中的tree组件来做。想选中单个页面,或者单个页面的某个具体按钮,就能把所有父级菜单勾选。原生配置项并没有这种玩法,百度搜索也没有具体写法,这里分享一下我的做法。上代码

<el-tree :data="treeData" node-key="id" :check-strictly="true" ref="tree" :show-checkbox="true" @check="checkeTree"></el-tree>

  methods: {
    initForm (data) {
      this.treeData = [{
        id: 1,
        label: '一级 1',
        children: [{
          id: 4,
          label: '二级 1-1',
          children: [{
            id: 9,
            label: '三级 1-1-1'
          }, {
            id: 10,
            label: '三级 1-1-2'
          }]
        }]
      }, {
        id: 2,
        label: '一级 2',
        children: [{
          id: 5,
          label: '二级 2-1'
        }, {
          id: 6,
          label: '二级 2-2'
        }]
      }, {
        id: 3,
        label: '一级 3',
        children: [{
          id: 7,
          label: '二级 3-1'
        }, {
          id: 8,
          label: '二级 3-2'
        }]
      }]
    },
    // 选中子节点,默认选中父节点
    checkeTree (data) {
      let thisNode = this.$refs.tree.getNode(data.id) // 获取当前节点
      const keys = this.$refs.tree.getCheckedKeys() // 获取已勾选节点的key值

      if (thisNode.checked) { // 当前节点若被选中
        for (let i = thisNode.level; i > 1; i--) { // 判断是否有父级节点
          if (!thisNode.parent.checked) { // 父级节点未被选中,则将父节点替换成当前节点,往上继续查询,并将此节点key存入keys数组
            thisNode = thisNode.parent
            keys.push(thisNode.data.id)
          }
        }
      }

      this.$refs.tree.setCheckedKeys(keys) // 将所有keys数组的节点全选中
    },
    cancel () {
      this.$refs.tree.setCheckedKeys([1, 4, 2])
      console.log(this.$refs.tree.getHalfCheckedKeys())
      // this.$emit('dialogSwitch')
    }
  }

 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要收起element-uitree的所有子节点,你可以使用以下方法:在tree的node-click事件里,通过遍历所有节点,将除当前节点外的其他节点的expanded属性设置为false,即可实现收起所有子节点的效果。具体代码如下所示: ```javascript methods: { handleNodeClick(data, node) { if (node.expanded) { let other_nodes = this.$refs.tree.data.filter(item => item.label !== data.label); other_nodes.forEach((item) => { this.$refs.tree.store.nodesMap\[item.label\].expanded = false; }) } }, }, ``` 这段代码,首先获取除当前节点外的其他节点,然后通过遍历这些节点,将它们的expanded属性设置为false,即可实现收起所有子节点的效果。 #### 引用[.reference_title] - *1* *3* [element-ui Tree组件点击节点展开,其余节点收起功能](https://blog.csdn.net/qq_43151592/article/details/124736434)[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^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [element-ui tree 点击章节节点勾选/取消勾选](https://blog.csdn.net/qq_44130459/article/details/127111390)[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^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值