当前位置:   article > 正文

Element UI中el-tree 添加右键菜单的方法,附带问题和解决方案_element-uiplus树形控件el-tree右键自定义菜单实现节点增删改

element-uiplus树形控件el-tree右键自定义菜单实现节点增删改

1、在el-tree 中添加方法 @node-contextmenu="rightClick"

  1. <el-tree :data="data"
  2. :props="defaultProps"
  3. @node-contextmenu="rightClick"
  4. @node-click="treeNodeClick">
  5. </el-tree>

2、建立一个右键组件,可以使用 el-menu 组件,优点是,可以借助el-menu 的 selec方法进行增删改查以及样式不用手写了,弊端是不容易获取点击的Dom,先暂时这样写吧

  1. <!-- 树形控件右键组件 -->
  2. <div v-show="menuShow" class="tree_rightmenu" :style="{ ...rightMenu }">
  3. <el-menu class="el-menu-vertical-demo" @select="selectMenuNode" >
  4. <el-menu-item id="menuitem" index="1" style="font-size: 12px;">
  5. <span slot="title">新增课时</span>
  6. </el-menu-item>
  7. <el-menu-item index="2" style="font-size: 12px;">
  8. <span slot="title">删 除</span>
  9. </el-menu-item>
  10. </el-menu>
  11. </div>

3、methods中的写法

  1. rightClick(e, data, node) {
  2. this.menuShow = false // 先把模态框关死,目的是 第二次或者第n次右键鼠标的时候 它默认的是true
  3. this.menuShow = true
  4. e.preventDefault() //关闭浏览器右键默认事件
  5. this.rightMenu = { top: e.pageY + 'px', left: e.pageX + 'px' }
  6. document.addEventListener('click',(ev)=>{
  7. // ev.stopImmediatePropagation()
  8. if(ev.target!==document.querySelector('.el-menu-item.is-active')){
  9. this.foo()
  10. }
  11. })
  12. },
  13. foo() {
  14. // 取消鼠标监听事件 菜单栏
  15. this.menuShow = false
  16. document.removeEventListener('click', this.foo) // 关掉监听,
  17. },

3、点击树状节点时,关闭右键组件

  1. treeNodeClick(){
  2. this.foo()
  3. },

4、css样式

  1. .tree_rightmenu {
  2. position: fixed;
  3. width: 120px;
  4. border: 1px solid rgba(0, 0, 0, 0.15);
  5. box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  6. z-index: 1000;
  7. }

5、最终效果

存在问题:在右键弹出的组件中,点击右键,会默认弹出浏览器的右键菜单栏;

想到的解决办法是,点击该节点时,使用原生js的 contextmenu 事件,在事件中用 e.preventDefault()方法进行阻止

最后建议使用vue右键插件 vue-contextmenujs

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/95620
推荐阅读