element table右键菜单

45 篇文章 2 订阅

在这里插入图片描述

row-contextmenu	当某一行被鼠标右键点击时会触发该事件	row, column, event

重要代码

    //右键点击事件
    rightClick(row, column, event) {
      console.log(arguments);

      var menu = document.querySelector("#menu");
      event.preventDefault();
      //获取我们自定义的右键菜单

      // 根据事件对象中鼠标点击的位置,进行定位
      menu.style.left = event.clientX + "px";
      menu.style.top = event.clientY + "px";
      // 改变自定义菜单的隐藏与显示
      menu.style.display = "block";
      console.log(row, column);
      // 获取当前右键点击table下标
      this.tableData.forEach((item, index) => {
        if (item.bugid === row.bugid) {
          //这里判断相等的条件可以自己改为该行数据的唯一键
          this.currentRowIndex = index;
          return false;
        }
      });
      this.setCurrent(row);
    },

全部代码

<template>
  <div>
    <el-table
      ref="singleTable"
      :data="tableData"
      highlight-current-row
      @row-click="clickTableRow"
      @row-contextmenu="rightClick"
      style="width: 100%"
    >
      <el-table-column type="index" width="50"> </el-table-column>
      <el-table-column property="date" label="日期" width="120">
      </el-table-column>
      <el-table-column property="name" label="姓名" width="120">
      </el-table-column>
      <el-table-column property="address" label="地址"> </el-table-column>
    </el-table>
    <div id="menu">
      <ul>
        <li @click="infoClick"><span>菜单1</span></li>
        <li>
          <span>菜单2</span> <span class="iconfont">&#xe688;</span>
          <ul>
            <li><span>菜单1</span></li>
            <li><span>菜单2</span></li>
            <li><span>菜单3</span></li>
          </ul>
        </li>
        <li><span>菜单3</span></li>
      </ul>
    </div>
  </div>
</template>

<script>

export default {
  data() {
    return {
      tableData: [
        {
          date: "2016-05-02",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1518 弄",
        },
        {
          date: "2016-05-04",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1517 弄",
        },
        {
          date: "2016-05-01",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1519 弄",
        },
        {
          date: "2016-05-03",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1516 弄",
        },
      ],
      currentRowIndex: 0,
    };
  },
  methods: {
    // 自定义菜单的点击事件
    infoClick(index) {
      this.$alert(
        "当前table的下标为" + this.currentRowIndex,

        {
          confirmButtonText: "确定",
          callback: (action) => {
            var menu = document.querySelector("#menu");
            menu.style.display = "none";
          },
        }
      );
    },
    // table的左键点击当前行事件
    clickTableRow(row, column, event) {
      var menu = document.querySelector("#menu");
      menu.style.display = "none";

      // this.tableData.forEach((item, index) => {
      //     if (row.name === item.name) {
      //         this.radio = index;
      //     }
      // })
    },
    // 右键点击事件
    rightClick(row, column, event) {
      console.log(arguments);

      var menu = document.querySelector("#menu");
      event.preventDefault();
      //获取我们自定义的右键菜单

      // 根据事件对象中鼠标点击的位置,进行定位
      menu.style.left = event.clientX + "px";
      menu.style.top = event.clientY + "px";
      // 改变自定义菜单的隐藏与显示
      menu.style.display = "block";
      console.log(row, column);
      // 获取当前右键点击table下标
      this.tableData.forEach((item, index) => {
        if (item.bugid === row.bugid) {
          //这里判断相等的条件可以自己改为该行数据的唯一键
          this.currentRowIndex = index;
          return false;
        }
      });
      this.setCurrent(row);
    },
    setCurrent(row) {
      console.log("高亮" + row);
      this.$refs.singleTable.setCurrentRow(row);
    },
  },
};
</script>

<style scoped>
#menu {
  position: absolute;
  display: none;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
  background: #ffffff;
  cursor: pointer;
  color: #606266;
  width: 200px;
  border: 1px solid #e4e7ed;
  /* margin: 50px auto; */
  font-size: 13px;
}

#menu ul {
  list-style: none;
  margin: 0px;
  padding: 0px;
}

#menu ul li {
  padding: 0px 10px;
  height: 30px;
  line-height: 30px;
  position: relative;
  box-sizing: border-box;
  text-indent: 8px;
}
#menu ul li .iconfont {
  float: right;
}

#menu ul li ul {
  display: none;
  position: absolute;
  left: 200px;
  top: 0px;
  width: 200px;
  border: 1px solid #e4e7ed;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
}

#menu ul li ul li {
  background-color: #fff;
}

#menu ul li:hover {
  background-color: #ecf5ff;
}

#menu ul li:hover ul {
  display: block;
}
</style>

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Element UI Plus并没有内置的右键菜单组件。对于实现Element UI Plus中的右键菜单功能,通常可以使用v-contextmenu插件来实现。然而,v-contextmenu插件对于使用v-for循环生成的元素失效,并且需要自行修改样式。 在实现树形控件右键菜单功能时,可以按需引入ELEMENTUI组件,并通过自定义模板、JS和样式来实现菜单功能。首先,引入ELEMENTUI组件,然后通过自定义的模板、JS和样式来创建右键菜单,并将其应用到树形控件中。 具体实施方法如下: 1. 按需引入ELEMENTUI组件,确保已引入所需的组件。 2. 创建菜单功能的模板,可以使用ELEMENTUI的Dropdown和Menu组件,结合v-for指令动态生成菜单选项。 3. 在JS中,通过监听树形控件的右键点击事件,触发菜单的显示,并传入当前元素节点的相关信息。 4. 对菜单进行样式的自定义修改,以满足需求。 5. 在data中定义所需的数据,如菜单选项及其对应的操作方法。 6. 最后,通过以上步骤的实现,可以得到具有右键菜单功能的树形控件。 总结:Element UI Plus没有内置的右键菜单组件,但可以使用v-contextmenu插件来实现。另外,可按需引入ELEMENTUI组件,并通过自定义模板、JS和样式来实现树形控件的右键菜单功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vue3 + Element Plus 实现动态标签页及右键菜单](https://blog.csdn.net/weixin_36757282/article/details/126578206)[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^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Vue+Element ui树形控件右键菜单](https://blog.csdn.net/qq_44956826/article/details/124119314)[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^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值