element - ui tree树形控件 父级半选状态id和选中子级id一起传给后台, 回显去掉父级半选状态id

文章讨论了在Vue.js应用中使用el-tree组件时遇到的数据回显错误,即设置default-checked-keys后,父节点默认全选,即使子节点未全选。解决方案是通过获取半选和已选节点的ID,动态构建新的显示选中数组。在`showkeyEve`函数中,根据后台返回的数据更新tree的显示,避免半选状态导致的全选问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误形态:数据回显默认全选

理想形态:根据数据回显,若子节点未全选,父节点则半选

错误原因:当使用包含父节点的数组设置组件的 default-checked-keys,父节点下的所有节点都会被选中。

解决代码:

<el-tree
      :data="dataTree"
      highlight-current
      show-checkbox
      :check-strictly="checkStrictly"
      node-key="id"
      :props="defaultProps"
      @check-change="getCheckedKeys"
      :default-checked-keys="showChecked"
      ref="tree">
    </el-tree>

//传给后台
 
var parentArr = this.$refs.menuTree.getHalfCheckedKeys();
var childeArr = this.$refs.menuTree.getCheckedKeys();
var arr = childeArr.concat(parentArr);


showkeyEve(){
      var params = "roleId=" + this.id +"&moduleId=" +this.modId
      //显示员工权限
      getRoleFunAuth(params).then(data => {
         if(this.id !="" && this.id !=null && this.id !=undefined ){
            //更新数据时的树形显示 (去掉半选状态id避免视图半选状态id下全选)
            var arr = data; //后台返回的id组成的数组
            var newArr = [];
            var item = '';
            arr.forEach(item=>{
                this.checked(item,this.dataTree,newArr)
            })
                this.showChecked = newArr;
        }          
      })
    },
    checked(id,data,newArr) {
      data.forEach(item => {
          if(item.id == id){
                if( item.children.length == 0 ){
                    newArr.push(item.id)
                }
          }else{
              if( item.children.length !=0 ){
                  this.checked(id,item.children,newArr)
                }
          }
      });
    },
el-select-treeElement UI 提供的一个树形择组件,可以实现多树结构的择功能。在 el-select-tree 中,回显示子及所的所有可以通过以下步骤实现: 1. 首先,需要准备一个树形数据源,数据源中每个节点包含一个唯一的标识符(如 id),以及节点的标识符(如 parentId)。 2. 在 el-select-tree 中,使用 v-model 绑定一个变量来保存所的节点。 3. 在 el-select-tree 的模板中,设置 show-all-levels 属性为 true,以示所有层的节点。 4. 在 el-select-tree 的模板中,使用 scoped slot 来自定义每个节点的示内容。在 scoped slot 中,可以根据节点的层关系来添加前缀或样式,以区分节点。 5. 在 el-select-tree 的模板中,使用 filter-node-method 属性来自定义过滤节点的方法。在过滤方法中,可以根据节点的层关系来判断是否示该节点。 下面是一个示例代码: ```html <template> <el-select-tree v-model="selectedNode" :data="treeData" show-all-levels :filter-node-method="filterNode"> <template slot-scope="{ node }"> <span v-if="node.level === 0" style="font-weight: bold">{{ node.label }}</span> <span v-else>{{ '└─'.repeat(node.level) }}{{ node.label }}</span> </template> </el-select-tree> </template> <script> export default { data() { return { selectedNode: null, treeData: [ { id: 1, parentId: null, label: 'Node 1' }, { id: 2, parentId: 1, label: 'Node 1-1' }, { id: 3, parentId: 2, label: 'Node 1-1-1' }, { id: 4, parentId: 2, label: 'Node 1-1-2' }, { id: 5, parentId: 1, label: 'Node 1-2' }, // 其他节点... ] }; }, methods: { filterNode(node, keyword) { // 过滤方法示例,根据节点的层关系判断是否示该节点 if (node.level === 0 || node.label.includes(keyword)) { return true; } return false; } } }; </script> ``` 在上述示例中,el-select-tree 组件绑定了一个变量 selectedNode,用于保存所的节点。treeData 是树形数据源,包含了多个节点。通过设置 show-all-levels 属性为 true,可以示所有层的节点。使用 scoped slot 来自定义每个节点的示内容,并根据节点的层关系添加前缀或样式。通过 filter-node-method 属性来自定义过滤节点的方法,根据节点的层关系判断是否示该节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值