• el-tree节点点击空白处无法获取dom


    事情的发展是这样子的,记下此篇,以防后续自己再次走弯路

    需求:目录树,右键有菜单,菜单中按钮会随着节点变化而显示和隐藏,比如根节点不允许删除和修改以及新增同级节点,子节点允许这些按钮存在

    我的解决方案:点击的时候获取了节点数据,然后右键就能控制显示和隐藏

    然而:用户操作不近如人意,他没有先选中,再右键,直接鼠标放到节点上面就右击了,而且是节点空白处

    卧槽,这就尴尬了,按钮都出来了, 然后就能删除了。。。。。

     

    反思:我的开始思路有问题,右键的时候,应该先判断是否获取到数据了,然后再决定要不要显示操作菜单

     

    解决方案

    (1)第一种方案:右键时,先判断当前是否获取到节点数据,当没有获取到数据的时候,给出提示:“请先选中节点”,有数据的情况下再显示操作菜单

     

    (2)第二种方案:添加鼠标移入事件,并且控制鼠标在移到节点空白处的时候,也可以获取到节点数据,el-tree本身移到到空白处是无法获取到的,只能移动到文字上面才能获取到,通过改变节点样式解决此问题

     

    上代码:

     

    <el-aside>
            <div :style="rightMenuStyle" class="flowNodeRightMenu" @mouseleave="leaveRightMenu">
              <ul>
                <li v-if="treeFormData.name !== '数据目录'" @click="addTree()"><i class="el-icon-plus"></i>&nbsp;&nbsp;新增同级节点</li>
                <li @click="addSonTree()"><i class="el-icon-plus"></i>&nbsp;&nbsp;新增子节点</li>
                <li v-if="treeFormData.name !== '数据目录'" @click="editTree()"><i class="el-icon-edit"></i>&nbsp;&nbsp;修改</li>
                <li v-if="treeFormData.name !== '数据目录'" @click="delTree()"><i class="el-icon-delete"></i>&nbsp;&nbsp;删除</li>
                <div class="flowNodeRightMenu_divider"></div>
                <li @click="dataRelease()"><i class="el-icon-s-promotion"></i>&nbsp;&nbsp;发布</li>
                <li @click="dataUnRelease()"><i class="el-icon-refresh-left"></i>&nbsp;&nbsp;撤销发布</li>
              </ul>
            </div>
            <div class="tree-scroll">
              <el-tree
                v-if="elVisible"
                ref="tree"
                class="flow-tree"
                node-key="id"
                :props="treeProps"
                :data="treeData"
                highlight-current
                :default-expanded-keys="expendArr"
                @node-click="treeClick"
                @node-contextmenu="treeRightClick"
              >
                <span slot-scope="{ node, data }" class="flowTree" @mouseenter="mouseenter(data)">
                  <span style=" 100%">{{ node.label }}</span>
                </span>
              </el-tree>
            </div>
          </el-aside>
    treeRightClick(event, data, node, obj) {
          this.rightMenuStyle.display = 'block'
          var top = event.clientY - 110; var left = event.clientX - 220
          this.rightMenuStyle.top = top + 'px'
          this.rightMenuStyle.left = left + 'px'
          document.addEventListener('click', this.leaveRightMenu)
        },
    treeClick(data) {
          this.treeFormData = data
          this.getFileDataList()
        },

    重点在于这个样式:加了这个样式,点击空白处就可以了

      .flowTree{ 
        flex
    : 1;
        display
    : flex;
        align-items
    : center;
        justify-content
    : space-between;
        font-size
    : 14px;
        padding-right
    : 10px;
        height
    :100%
    }
  • 相关阅读:
    codeforces 669C C. Little Artem and Matrix(水题)
    codeforces 669B B. Little Artem and Grasshopper(水题)
    oracle drop table recyclebin恢复
    odu恢复drop表--不通过logmnr挖掘object_id
    odu恢复drop表--通过logmnr挖掘object_id
    odu恢复delete 表
    GO学习-(7) Go语言基础之流程控制
    GO学习-(6) Go语言基础之运算符
    GO学习-(4) Go语言基础之变量和常量
    GO学习-(3) VS Code配置Go语言开发环境
  • 原文地址:https://www.cnblogs.com/qingqing74647464/p/15186923.html
Copyright © 2020-2023  润新知