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: "主題大類",
dataIndex: "THEME"
},
{
title: "中文名稱",
dataIndex: "CN_NAME"
},
{
title: "英文名稱",
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: "主題大類",
dataIndex: "THEME"
},
{
title: "中文名稱",
dataIndex: "CN_NAME"
},
{
title: "英文名稱",
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)文章
ElementUI表單驗(yàn)證validate和validateField的使用及區(qū)別
Element-UI作為前端框架,最常使用到的就是表單驗(yàn)證,下面這篇文章主要給大家介紹了關(guān)于ElementUI表單驗(yàn)證validate和validateField的使用及區(qū)別,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
vue3.x 使用jsplumb實(shí)現(xiàn)拖拽連線
這篇文章主要為大家詳細(xì)介紹了vue3.x 使用jsplumb實(shí)現(xiàn)拖拽連線,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
vue3數(shù)據(jù)監(jiān)聽(tīng)watch/watchEffect的示例代碼
我們都知道監(jiān)聽(tīng)器的作用是在每次響應(yīng)式狀態(tài)發(fā)生變化時(shí)觸發(fā),在組合式?API?中,我們可以使用?watch()函數(shù)和watchEffect()函數(shù),下面我們來(lái)看下vue3如何進(jìn)行數(shù)據(jù)監(jiān)聽(tīng)watch/watchEffect,感興趣的朋友一起看看吧2023-02-02
Vue執(zhí)行方法,方法獲取data值,設(shè)置data值,方法傳值操作
這篇文章主要介紹了Vue執(zhí)行方法,方法獲取data值,設(shè)置data值,方法傳值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
關(guān)于vue項(xiàng)目proxyTable配置和部署服務(wù)器的問(wèn)題
這篇文章主要介紹了關(guān)于vue項(xiàng)目proxyTable配置和部署服務(wù)器的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04

