Vue中Table組件行內(nèi)右鍵菜單實(shí)現(xiàn)方法(基于 vue + AntDesign)
最近做的一個(gè)項(xiàng)目是基于 vue + AntDesign 的。由于項(xiàng)目要求,需要在 Table 組件的行內(nèi)點(diǎn)右鍵的時(shí)候彈出菜單。在線演示地址及最終效果圖如下:
首先新建一個(gè)Table組件的實(shí)例:
<a-table :columns="columns" :rowKey="record => { return record.INDEX;}" :dataSource="tableData" /> ... const columns = [ { title: "序號(hào)", dataIndex: "INDEX" }, { title: "主題大類(lèi)", dataIndex: "THEME" }, { title: "中文名稱(chēng)", dataIndex: "CN_NAME" }, { title: "英文名稱(chēng)", dataIndex: "EN_NAME" } ]; ... data() { return { columns, tableData: [ { INDEX: 0, THEME: "基礎(chǔ)數(shù)據(jù)", CN_NAME: "地區(qū)", EN_NAME: "Area" }, { INDEX: 1, THEME: "個(gè)人信息", CN_NAME: "姓名", EN_NAME: "Name" } ] }; }
新建一個(gè)Menu菜單組件的實(shí)例及其樣式:
<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加樣式主要是為了實(shí)現(xiàn)點(diǎn)右鍵時(shí)Menu菜單出現(xiàn)在鼠標(biāo)位置,所以我用了position: "absolute"來(lái)定義。
下面就是最重要的,通過(guò)Table組件的customRow參數(shù)來(lái)設(shè)置鼠標(biāo)右鍵事件。首先添加Table組件的customRow參數(shù):
<a-table ... :customRow="customClick" />
然后在data里添加customClick的右鍵方法,以及在methods里添加body的click方法。添加body的click方法是為了在出現(xiàn)右鍵菜單后,點(diǎn)擊左鍵時(shí)關(guān)閉菜單。
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組件行內(nèi)右鍵菜單就實(shí)現(xiàn)了。完整代碼如下:
<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: "序號(hào)", dataIndex: "INDEX" }, { title: "主題大類(lèi)", dataIndex: "THEME" }, { title: "中文名稱(chēng)", dataIndex: "CN_NAME" }, { title: "英文名稱(chēng)", dataIndex: "EN_NAME" } ]; export default { data() { return { columns, tableData: [ { INDEX: 0, THEME: "基礎(chǔ)數(shù)據(jù)", CN_NAME: "地區(qū)", EN_NAME: "Area" }, { INDEX: 1, THEME: "個(gè)人信息", 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>
總結(jié)
以上所述是小編給大家介紹的Vue中Table組件行內(nèi)右鍵菜單實(shí)現(xiàn)方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
詳解vue渲染從后臺(tái)獲取的json數(shù)據(jù)
這篇文章主要介紹了詳解vue渲染從后臺(tái)獲取的json數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07vue element-ui table組件動(dòng)態(tài)生成表頭和數(shù)據(jù)并修改單元格格式 父子組件通信
這篇文章主要介紹了vue element-ui table組件動(dòng)態(tài)生成表頭和數(shù)據(jù)并修改單元格格式 父子組件通信,需要的朋友可以參考下2019-08-08vue移動(dòng)端輕量級(jí)的輪播組件實(shí)現(xiàn)代碼
這篇文章主要介紹了vue移動(dòng)端輕量級(jí)的輪播組件實(shí)現(xiàn)代碼,一個(gè)簡(jiǎn)單的移動(dòng)端卡片滑動(dòng)輪播組件,適用于Vue2.x。本文給大家?guī)?lái)了實(shí)例代碼,需要的朋友參考下吧2018-07-07vue 項(xiàng)目build錯(cuò)誤異常的解決方法
這篇文章主要介紹了vue build錯(cuò)誤異常的解決方法 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04Vue.js 帶下拉選項(xiàng)的輸入框(Textbox with Dropdown)組件
這篇文章主要介紹了Vue.js 帶下拉選項(xiàng)的輸入框(Textbox with Dropdown)組件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04uni-app制作小程序?qū)崿F(xiàn)左右菜單聯(lián)動(dòng)效果
這篇文章主要介紹了uni-app制作小程序?qū)崿F(xiàn)左右菜單聯(lián)動(dòng)效果,實(shí)現(xiàn)步驟和思路都很簡(jiǎn)單,今天通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11vue項(xiàng)目使用axios封裝request請(qǐng)求的過(guò)程
這篇文章主要介紹了vue項(xiàng)目使用axios封裝request請(qǐng)求,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04