获取el-tree高度,使其父元素<div>灵活高度

目的

①获取element-ui的el-tree组件高度

②使el-tree组件的父元素盒子(id="left")根据el-tree组件变化的长度而灵活变化

解决办法

①给父元素盒子(id="left")设定灵活的style

②设定<el-tree>初始值

  methods: {
    updateTreeHeight() {
      setTimeout(() => {
        if (this.$refs.tree) {
          this.el_treeHeight = this.$refs.tree.$el.clientHeight;
          console.log('Updated el_treeHeight:', this.el_treeHeight);
        }
      }, 250); // 延迟300毫秒后检查
    },
}

③获取<el-tree>的高度,这里用了setTime延时函数,不用的话获取到的高度跟实际上的不同步,永远打印的是上一个高度。(也可能是因为我的el-tree用了lazy的原因)

updateTreeHeight() {
    this.$nextTick(() => {
        if (this.$refs.tree) {
            this.el_treeHeight = this.$refs.tree.$el.clientHeight;
            console.log('Updated el_treeHeight:', this.el_treeHeight);
        }
    });
}

(我也尝试了this.$nextTick,但是对我来说没有用)

④如图上

  mounted() {
    this.$refs.tree.$on('node-expand', this.updateTreeHeight);
    this.$refs.tree.$on('node-collapse', this.updateTreeHeight);
  },

⑤这两行代码的作用是为 <el-tree> 组件添加事件监听器。这里$on 方法侦听 <el-tree> 发出的 node-expandnode-collapse 事件。这两个事件分别在树节点展开和收缩时触发。

效果展示

最后

我是一名大二的计科女大学生,希望大家相互沟通交流,学习进步哦o(* ̄▽ ̄*)ブ~

<template> <div class="app-container"> <!-- 操作工具栏 --> <div class="mb-4"> <el-button type="primary" @click="showFormDialog()">新增分类</el-button> </div> <!-- 树形表格 --> <el-table :data="tableData" row-key="id" :tree-props="{children: 'children'}" border style="width: 100%" > <el-table-column prop="id" label="ID" width="80"> <template #default=“{ row }”> <template v-if=“row.children && row.children.length > 0”> {{ row.id }} </template> <span v-else class=“empty-id”></span> </template> </el-table-column> <el-table-column prop=“title” label=“分类名称” /> <el-table-column label=“操作” width=“180” align=“center”> <template #default=“{ row }”> <el-button type=“primary” size=“small” @click=“showFormDialog(row.id)” >修改</el-button> <el-button type=“danger” size=“small” @click=“handleDelete(row.id)” >删除</el-button> </template> </el-table-column> </el-table> <!-- 表单对话框 --> <el-dialog v-model="formVisible" :title="currentId ? '修改分类' : '新增分类'" width="30%" > <el-form ref="formRef" :model="form" :rules="rules" label-width="80px" > <el-form-item label="分类名称" prop="title"> <el-input v-model="form.title" placeholder="请输入分类名称" /> </el-form-item> </el-form> <template #footer> <el-button @click="formVisible = false">取消</el-button> <el-button type="primary" @click="submitForm">确认</el-button> </template> </el-dialog> </div> </template>要求点击新增分类时弹出的对话框里再加一个上级选择,用select树形结构数据展示,给出vue3的全部代码
最新发布
03-22
<div style="margin: 8px; width: 98%; height: 90%; overflow: scroll"> <!-- default-expand-all --> <el-tree :data="natureOptions" :props="defaultProps" :expand-on-click-node="false" :filter-node-method="filterNode" node-key="id" default-expand-all ref="tree" @node-click="handleNodeClick" > <span class="custom-tree-node show-hide" style="width: 100%; height: 80%" slot-scope="{ node, data }" > <span v-if="isLeafNode(node)" class="leaf-marker"></span> <div style=" width: 100%; display: flex; align-items: center; justify-content: space-between; " > <div style="width: 88%; display: flex">{{ node.label }}</div> <div v-if="isLeafNode(node)" style="width: 12%"> <div class="rating-container"> <el-rate v-model="data.score" @change="(val) => handleRateChange(node, val)" class="custom-rate" > </el-rate> </div> </div> </div> </span> </el-tree> </div> 组件 <Addlogout ref="addDiagLogin" :dataListArr="dataArray" @send-message="handleMessage" @send-defeated="handleDefeated" @dialog-closed="handleDialogClosed" ></Addlogout> js : // 设置全部分数 handleSetScore (targetScore) { const setScore = (nodes) => { nodes.forEach(node => { if (node.children && node.children.length > 0) { setScore(node.children) // 递归处理子节点 } else { // 使用Vue.set确保响应式更新 this.$set(node, 'score', targetScore) } }) } setScore(this.natureOptions) }, // 满分 handleMessage (e) { this.handleSetScore(5) }, // 零分 handleDefeated (e) { this.handleSetScore(0) }, 需求 根据点击按钮满分 所有的el-rate 数据为满分 星星点亮 如果是零分 所有星星变成 0 满分不确定是多少分数 单选el-rate可以操作
03-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值