您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“如何用vue實現自定義全局右鍵菜單”,內容詳細,步驟清晰,細節處理妥當,希望這篇“如何用vue實現自定義全局右鍵菜單”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
注意:
需要在項目中找到頁面整體布局的組件,比如項目使用Home.vue作為整個項目的公共布局,將根元素定位設置成relative,使右鍵菜單相對于其進行定位。
一、vuex中定義全局狀態用于管理右鍵菜單
export default { /** * menuContent格式: * [ * { * name: '新建文件', // 操作名 * method: 'createDirectory', // 需要執行的對應組件中的方法 * disabled: true // 是否禁用,可以根據頁面具體邏輯進行調整 * } * ] * * * 整體右鍵菜單采用絕對定位,所以clientX、clientY代表是left和top定位 */ state: { menuContent: [], // 右鍵菜單內容 clientX: '', // left clientY: '', // top displayContextMenu: false // 是否展示右鍵菜單 }, mutations: { SET_CONTEXT_MENU: (state, payload) => { state.menuContent = payload.menuContent; state.clientX = payload.clientX; state.clientY = payload.clientY; state.displayContextMenu = payload.displayContextMenu; }, } }
二、定義公共組件ContextMenu.vue
<template> <div class="context-menu" v-show="contextMenu.displayContextMenu" :> <ul> <li v-for="(item, i) in contextMenu.menuContent" :key="i" :class="item.disabled ? 'disabled' : ''" @click="emitEvent(item.method)"> {{item.name}} </li> </ul> </div> </template> <script> import { mapState } from 'vuex'; import bus from '@/views/common/bus'; export default { name: 'ContextMenu', data(){ return { } }, computed: { ...mapState(['contextMenu']) }, methods: { emitEvent(type){ bus.$emit('operateDirectory', type) } } } </script> <style lang="scss" scoped> .context-menu { position: absolute; background: #FFF; color: #34495E; min-width: 100px; box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.2); border-radius: 2px; cursor: pointer; z-index: 1002; &>ul { text-align: left; padding: 5px 10px; &>li { padding: 3px 4px; font-size: 12px; list-style: none; height: 24px; line-height: 24px; &:hover { background: #EDF6FF; } } .disabled { color: #888585; pointer-events: none; } } } </style>
三、在組件中使用
import { mapState } from 'vuex'; // ... computed: { ...mapState(['contextMenu']) }, created(){ bus.$on('operateDirectory', (param) => { // 點擊右鍵菜單時,應觸發組件內的同名方法,首先應判斷該方法是否在本組件內存在,存在則調用 if(this[param]){ this[param](); } }); }, // ... methods: { showContextMenu(event, data) { event.preventDefault(); // 阻止瀏覽器的默認事件 const menuContent = { menuContent: [ { icon: "el-icon-upload2", name: "運行", method: "run", }, { icon: "el-icon-refresh", name: "編輯", method: "editConfig", }, { icon: "el-icon-refresh", name: "添加", method: "addCommond", }, { icon: "el-icon-refresh", name: "刪除", method: "deleteConfig", }, ], clientX: event.clientX, clientY: event.clientY, displayContextMenu: true, }; this.$store.commit("SET_CONTEXT_MENU", menuContent); // 再次點擊頁面,右鍵菜單消失 document.onclick = (event) => { this.$store.commit("SET_CONTEXT_MENU", { displayContextMenu: false, }); }; }, run(){ // ... }, editConfig(){ // ... }, addCommond(){ // ... }, deleteConfig(){ // ... } }
讀到這里,這篇“如何用vue實現自定義全局右鍵菜單”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。