您好,登錄后才能下訂單哦!
本篇內容介紹了“vue怎么實現自定義全局右鍵菜單”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
效果如圖所示:
注意:
需要在項目中找到頁面整體布局的組件,比如項目使用Home.vue作為整個項目的公共布局,將根元素定位設置成relative,使右鍵菜單相對于其進行定位。
本文的右鍵菜單主要使用vuex實現
一、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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。