Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)


Posted in Javascript onNovember 21, 2019

最近做的一个项目是基于 vue + AntDesign 的。由于项目要求,需要在 Table 组件的行内点右键的时候弹出菜单。在线演示地址及最终效果图如下:

在线演示地址>>

Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign) 

首先新建一个Table组件的实例:

<a-table
 :columns="columns"
 :rowKey="record => { return record.INDEX;}"
 :dataSource="tableData"
/>
...
 const columns = [
 {
  title: "序号",
  dataIndex: "INDEX"
 },
 {
  title: "主题大类",
  dataIndex: "THEME"
 },
 {
  title: "中文名称",
  dataIndex: "CN_NAME"
 },
 {
  title: "英文名称",
  dataIndex: "EN_NAME"
 }
];
...
 data() {
  return {
   columns,
   tableData: [
    { INDEX: 0, THEME: "基础数据", CN_NAME: "地区", EN_NAME: "Area" },
    { INDEX: 1, THEME: "个人信息", CN_NAME: "姓名", EN_NAME: "Name" }
   ]
  };
 }

新建一个Menu菜单组件的实例及其样式:

<a-menu :style="menuStyle" v-if="menuVisible">
   <a-menu-item>{{menuData.THEME}}</a-menu-item>
   <a-menu-item>{{menuData.CN_NAME}}</a-menu-item>
   <a-menu-item>{{menuData.EN_NAME}}</a-menu-item>
  </a-menu>
...
 data() {
  return {
   ...
   menuData: {},
   menuVisible: false,
   menuStyle: {
    position: "absolute",
    top: "0",
    left: "0",
    border: "1px solid #eee"
   }
  };
 }

注意这里给Menu加样式主要是为了实现点右键时Menu菜单出现在鼠标位置,所以我用了position: "absolute"来定义。

下面就是最重要的,通过Table组件的customRow参数来设置鼠标右键事件。首先添加Table组件的customRow参数:

<a-table
   ...
   :customRow="customClick"
  />

然后在data里添加customClick的右键方法,以及在methods里添加body的click方法。添加body的click方法是为了在出现右键菜单后,点击左键时关闭菜单。

data() {
  return {
   ...
   customClick: record => ({
    on: {
     contextmenu: e => {
      e.preventDefault();
      this.menuData = record;
      this.menuVisible = true;
      this.menuStyle.top = e.clientY + "px";
      this.menuStyle.left = e.clientX + "px";
      document.body.addEventListener("click", this.bodyClick);
     }
    }
   })
  };
 },
 methods: {
  bodyClick() {
   this.menuVisible = false;
   document.body.removeEventListener("click", this.bodyClick);
  }
 }

至此,Ant Design Vue中Table组件行内右键菜单就实现了。完整代码如下:

<template>
 <div>
  <a-table
   :columns="columns"
   :rowKey="record => { return record.INDEX;}"
   :dataSource="tableData"
   :customRow="customClick"
  />
  <a-menu :style="menuStyle" v-if="menuVisible">
   <a-menu-item>{{menuData.THEME}}</a-menu-item>
   <a-menu-item>{{menuData.CN_NAME}}</a-menu-item>
   <a-menu-item>{{menuData.EN_NAME}}</a-menu-item>
  </a-menu>
 </div>
</template>
<script>
const columns = [
 {
  title: "序号",
  dataIndex: "INDEX"
 },
 {
  title: "主题大类",
  dataIndex: "THEME"
 },
 {
  title: "中文名称",
  dataIndex: "CN_NAME"
 },
 {
  title: "英文名称",
  dataIndex: "EN_NAME"
 }
];
export default {
 data() {
  return {
   columns,
   tableData: [
    { INDEX: 0, THEME: "基础数据", CN_NAME: "地区", EN_NAME: "Area" },
    { INDEX: 1, THEME: "个人信息", CN_NAME: "姓名", EN_NAME: "Name" }
   ],
   menuData: {},
   menuVisible: false,
   menuStyle: {
    position: "absolute",
    top: "0",
    left: "0",
    border: "1px solid #eee"
   },
   customClick: record => ({
    on: {
     contextmenu: e => {
      e.preventDefault();
      this.menuData = record;
      this.menuVisible = true;
      this.menuStyle.top = e.clientY + "px";
      this.menuStyle.left = e.clientX + "px";
      document.body.addEventListener("click", this.bodyClick);
     }
    }
   })
  };
 },
 methods: {
  bodyClick() {
   this.menuVisible = false;
   document.body.removeEventListener("click", this.bodyClick);
  }
 }
};
</script>

总结

以上所述是小编给大家介绍的Vue中Table组件行内右键菜单实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JS判断是否为数字,是否为整数,是否为浮点数的代码
Apr 24 Javascript
JavaScript中的细节分析
Jun 30 Javascript
Jquery图形报表插件 jqplot简介及参数详解
Oct 10 Javascript
不使用浏览器运行javascript代码的方法
Jul 24 Javascript
js 用CreateElement动态创建标签示例
Nov 20 Javascript
纯JS实现旋转图片3D展示效果
Apr 12 Javascript
javascript中FOREACH数组方法使用示例
Mar 01 Javascript
jQuery实现TAB选项卡切换特效简单演示
Mar 04 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
Jul 11 jQuery
Vue项目安装插件并保存
Jan 28 Javascript
Node.js系列之安装配置与基本使用(1)
Aug 30 Javascript
vue中实现动态生成二维码的方法
Feb 21 Javascript
vue element 中的table动态渲染实现(动态表头)
Nov 21 #Javascript
浅谈Vue SSR中的Bundle的具有使用
Nov 21 #Javascript
webpack常用构建优化策略小结
Nov 21 #Javascript
Vue 中 filter 与 computed 的区别与用法解析
Nov 21 #Javascript
js实现课堂随机点名系统
Nov 21 #Javascript
JavaScript实现简单随机点名器
Nov 21 #Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
Nov 21 #Javascript
You might like
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
php购物车实现方法
2015/01/03 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
JavaScript delete 属性的使用
2009/10/08 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
[01:30:55]VG vs Mineski Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
详解Python3中yield生成器的用法
2015/08/20 Python
十条建议帮你提高Python编程效率
2016/02/16 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
3种python调用其他脚本的方法
2020/01/06 Python
Python: glob匹配文件的操作
2020/12/11 Python
意大利奢侈品综合电商网站:MODES
2019/12/14 全球购物
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
爱岗敬业演讲稿范文
2014/01/14 职场文书
社区中秋节活动方案
2014/01/29 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
公务员年度考核评语
2014/12/31 职场文书
先进个人评语大全
2015/01/04 职场文书
2015入党自传书范文
2015/06/26 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
virtualenv隔离Python环境的问题解析
2022/06/21 Python