首页 > 其他分享 >vue 3+TS 封装自定义右键全局菜单(虚拟节点)

vue 3+TS 封装自定义右键全局菜单(虚拟节点)

时间:2024-03-15 16:30:28浏览次数:25  
标签:菜单 const name 自定义 vue 右键 data

有时我们需要点击(右键或左键)某个元素时弹出菜单,实现复制、粘贴、删除等功能。本文将介绍如何封装一个自定义的右键全局菜单(无三方依赖)。封装的菜单可自定义菜单项,图标,禁用,分割线,隐藏等。并且可以在全局任意地方使用。源码在文章末尾。

效果

在这里插入图片描述

使用

<template>
  <div>
    <div @click.right.native="showContextMenu($event, data)">
      右键点击我
    </div>
  </div>
</template>
<script lang="ts" setup>
import { ContextMenuOptions, MenuItem } from '@/components/ContextMenu/types'

interface Data {
  name: string
  count: number
}

// data 无实际意义,只是为了展示菜单可以根据点击不同的数据显示不同的菜单项
const data: Data = {
  name: '张三',
  count: 1
}

const showContextMenu = (e: MouseEvent, data: Data) => {
  const items: MenuItem[] = [
    {
      label: `复制 ${data.name}`,
      icon: 'copy',
      onClick: () => {
        console.log(`已复制 ${data.name}`)
      }
    },
    {
      label: `test ${data.name}`,
      visible: data.count > 0,
      onClick: () => {
        console.log(`test ${data.name}`)
      }
    }
  ]
  const options: ContextMenuOptions = {
    items
  }
  proxy.$contextMenu(e, options)
}
</script>

实现

渲染用的是 vue 的 h (创建虚拟节点) 和 render (渲染虚拟节点) 函数。

这个全局菜单目前只是实现了基本功能,期待大家的 Issue 和 PR。

源码地址

大家可以根据自己的网络情况选择国内或国外的地址。

GitHub
Gitee

标签:菜单,const,name,自定义,vue,右键,data
From: https://blog.csdn.net/weixin_45456454/article/details/136652430

相关文章

  • Vue学习笔记52--全局事件总线
    Vue全局事件总线:一种组件之间通信的方式,适用于任意组件之间通信。1.所有组件,即VueComponent所有的组件实例对象vc2.每次使用VueComponent都是new一个新的vc3.Vue.prototype=VueComponent.prototype.__proto__(可以让组件实例对象vc访问到Vue原型上的属性、方法)4.$emit、$o......
  • 禁用右键菜单、禁用鼠标选中、// 禁止键盘F12键
    禁用右键菜单、禁用鼠标选中、//禁止键盘F12键//禁用右键菜单document.oncontextmenu=newFunction("event.returnValue=false");//禁用鼠标选中document.onselectstart=newFunction("event.returnValue=false");//禁止键盘F12键......
  • vue3 中ref和reactive的区别讲解
    1.定于数据角度对比:ref用来定义:基本类型数据reactive用来定义:对象、或数组类型的数据备注:ref也可以用来定义对象或数组类型数据,它内部会自动通过reactive转为代理对象2.原理角度对比:ref通过Object.defineProperty()的get与set来实现响应式的(数据劫持)reactive通过......
  • 创建Vue项目的三种方式
    1、vuecreate(首选)createanewprojectpoweredbyvue-cli-service以这种方式创建的项目,vue版本是当前最稳定的版本,不是最新的。首先打开控制台,输入下面的命令。vuecreate项目名称按键盘上的上下键,选择Manuallyselectfeatures(手动配置)。通过↑↓箭头选择你......
  • VS Code配置Vue3模板代码
    打开VSCode,file-Preferences-ConfigureUserSnippets{"Printtoconsole":{"prefix":"vue","body":["<scriptsetuplang=\"ts\">","i......
  • 塑造自己的神器——vim的自定义配置
    本文结构:1、简介2、配置文件所在位置3、语法解释及简单的配置示例4、常用配置选项1.简介:Vim编辑器的配置文件是vimrc,它允许用户自定义Vim的行为,包括快捷键、颜色方案、插件加载等。Vim在启动时会自动加载vimrc文件,从而应用用户定义的设置。2.vimrc的位置:vimrc......
  • Vue3生命周期 及和vue2的对比
    一、Vue3中的生命周期1、setup():开始创建组件,在beforeCreate和created之前执行,创建的是data和method2、onBeforeMount():组件挂载到节点上之前执行的函数;3、onMounted():组件挂载完成后执行的函数;4、onBeforeUpdate():组件更新之前执行的函数;5、onUpdated():......
  • MirageJS 使用总结 vue2上亲测使用
    注:MirageJS英文文档看的头疼,且百度上都是片段比较多,本着拿来主义的思路,就把代码粘贴上,这样不仅方便自己,也能方便大家简单介绍一下他的好处及功能MirageJS是一个用于模拟服务器端数据和网络请求的JavaScript库,它可以帮助开发者在前端环境中创建假数据、定义路由和处理请求。......
  • 【vue3】关于ref、toRef、toRefs
    1.ref函数,可以把简单数据类型包裹为响应式数据(复杂类型也可以),注意JS中操作值的时候,需要加.value属性,模板中正常使用即可2.toRef函数的作用:转换响应式对象中某个属性为单独响应式数据,并且转换后的值和之前是关联的(ref函数也可以转换,但值非关联)3.toRefs函数的作用:转换响......
  • vue3 批量导入excel表
    安装xlxs插件npminstallxlsx//安装import*asXLSXfrom"xlsx";//引入 批量导入里面引用了element-plus的loading和弹窗,不需要的可以去掉letexcelloading;constimportExcel=(e)=>{//导入excelvarfile=e.target.files[0];if(......