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 相关文章推荐
JQUERY操作JSON实例代码
Feb 09 Javascript
javascript获取URL参数与参数值的示例代码
Dec 20 Javascript
JS批量修改PS中图层名称的方法
Jan 26 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
Jun 19 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
Mar 01 Javascript
类似于QQ的右滑删除效果的实现方法
Oct 16 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
Oct 17 Javascript
详解vue的数据劫持以及操作数组的坑
Apr 18 Javascript
JavaScript onclick事件使用方法详解
May 15 Javascript
JS call()及apply()方法使用实例汇总
Jul 11 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
Nov 13 Javascript
关于Javascript闭包与应用的详解
Apr 22 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
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
javascript 新浪背投广告实现代码
2009/07/07 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
Python实现一个简单的毕业生信息管理系统的示例代码
2020/06/08 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
Intersport西班牙:在线体育商店
2019/11/06 全球购物
网站编辑求职信
2013/10/17 职场文书
中英双版中文教师求职信
2013/10/27 职场文书
路政管理专业推荐信
2013/11/11 职场文书
给校长的建议书100字
2014/05/16 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
html粘性页脚的具体使用
2022/01/18 HTML / CSS
PyTorch中的torch.cat简单介绍
2022/03/17 Python