BuildAdmin12:逆向操作!!! 子组件调用父组件方法实现弹出框

在 Windows 系统下使用 VMware 安装 Ubuntu 24.04 LTS 系统 Ubuntu24.04桌面端官方下载:https://cn.ubuntu.com/download/desktop。 阅读详情

前言

上一篇写了弹出框出现位置定位,以及标签禁用的实现。本篇文章就开始写五个标签功能的实现,本篇文章针对重新加载标签,展开功能实现的过程。

弹出框定义点击事件

在弹出框中,定义了click事件,绑定了onContextmenuItem方法。

<li class="el-dropdown-menu__item" :class="item.disabled ? 'is-disabled' : ''" tabindex="-1" 
    @click="onContextmenuItem(item)">
    <Icon size="12" :name="item.icon" />
    <span>{{ item.label }}</span>
</li>

我们看看onContextmenuItem是如何定义的。

const emits = defineEmits<{
    (e: 'contextmenuItemClick', item: ContextmenuItemClickEmitArg): void
}>()

// 点击标签,将contextItem emit给父组件
const onContextmenuItem = (item: ContextmenuItemClickEmitArg) => {
    if (item.disabled) return
    item.menu = toRaw(state.menu)
    emits('contextmenuItemClick', item)
}

onContextmenuItem将item的menu赋值(标签禁用的不赋值,直接return返回,同时调用父组件的contextmenuItemClick方法。*

在vue中,defineProps是子组件接收父组件传递的值,defineEmits则子组件调用父组件事件,同时还可以传递参数,总的来说都是父子组件通信的。

这里的item指的就是之前讲的contextmenuItems中的功能标签。

contextmenuItems: [
    {name: 'refresh', label: '重新加载', icon: 'fa fa-refresh'},
    {name: 'close', label: '关闭标签', icon: 'fa fa-times'},
    {name: 'fullScreen', label: '当前标签全屏', icon: 'el-icon-FullScreen'},
    {name: 'closeOther', label: '关闭其他标签', icon: 'fa fa-minus'},
    {name: 'closeAll', label: '关闭全部标签', icon: 'fa fa-stop'},
]

弹出框组件调用了父组件tabs的contextmenuItemClick方法,并传递了item作为参数。

ContextmenuItemClickEmitArg

其中,形参中的ContextmenuItemClickEmitArg类型是自定义的接口。

export interface ContextMenuItem {
    name: string
    label: string
    icon?: string
    disabled?: boolean
}

export interface ContextmenuItemClickEmitArg extends ContextMenuItem {
    menu?: RouteLocationNormalized
}

相当于在contextmenuItems类型上,添加了一个menu字段。menu字段在BuildAdmin中指的是菜单路由,这个munu是如何赋值的呢?

在上一篇讲到弹出框弹出时,右键tab标签,调用弹出框组件的onShowContextmenu方法显示弹出框时,onShowContextmenu就绑定了tab的路由,将menu赋值给了state.menu,在弹出框的标签点击事件onContextmenuItem就将state.menu赋值给了item.menu。

赋值在代码的61和82行。

tabs定义标签事件

在tabs中使用弹出框组件时,通过v-on来定义contextmenuItemClick方法,这样弹出框组件才能接收。

<Contextmenu ref="contextmenuRef" :items="state.contextmenuItems" @contextmenuItemClick="onContextmenuItem"/>

contextmenuItemClick又指向了onContextmenuItem方法,contextmenuItemClick就是实现标签功能具体的方法。

const onContextmenuItem = async (item: ContextmenuItemClickEmitArg) => {
    const {name, menu} = item
    if (!menu) return
    switch (name) {
        case 'refresh':
            proxy.eventBus.emit('onTabViewRefresh', menu)
            break
        case 'close':
            closeTab(menu)
            break
        case 'closeOther':
            closeOtherTab(menu)
            break
        case 'closeAll':
            closeAllTab(menu)
            break
        case 'fullScreen':
            if (route.path !== menu?.path) {
                router.push(menu?.path as string)
            }
            navTabs.setFullScreen(true)
            break
    }
}

在onContextmenuItem中,就是对ContextmenuItemClickEmitArg类型的item做了一个switch case的判断。

if (!menu) return是对禁用的标签不作处理,因为在上图onContextmenuItem方法的第81行,如果标签禁用,则menu不赋值。

思考

为什么非要在tabs中实现实现这些功能,还要父子组件各种值和方法传递,直接在弹出框组件实现不好吗?

  1. 灵活性:如果有多个组件使用弹出框组件,父组件通过传递不同的item,就能定制每个组件的弹出框标签列表。

  2. tabs中已经拿到了一些变量,例如所有的tab(tabsViews),激活的tab等。就拿关闭其他标签来说,你得知道打开了哪些标签,才能关闭。这些在tabs实现的时候都定义了,所以在tabs中实现这些功能比较方便,直接可以复用。

结语

本篇主要根据vue3中父子组件方法调用通信,讲了BuildAdmin的弹出框标签功能架构的实现,主要是对emit的一个理解和使用.下一篇文章写重新加载标签功能的具体实现.

流体动力学仿真软件:XFlow_(16).案例研究:热传输与相变 包括密度、比热容、热传导系数等。 阅读详情

相关推荐

二阶FLL辅助三阶PLL环路的代码解读

今天对GNSS接收机里面的载波跟踪环路代码进行了解读 以下是个人的一点见解 % 载波环第二步:环路滤波器 二阶FLL辅助三阶PLL环路 carrLoopS0 = lastCarrLoopS0 + (phaseErr*tau0PLL + freqErr*tau1FLL) * PDIcarr; carrLoopS1 = lastCarrLoopS1 + (tau1PLL*phaseErr + carrLoopS0 + tau2FLL*freqErr) * PD

LWN7321的博客 2631

buildadmin+tp8表格操作(6)表格行中添加详情按钮并弹出对话框

有了这一行, 那么 它的子组件中, 都可以获取到这个对象,所以, 有弹出框的 Info 组件,也可以获取到。下面来看一下,dialog的 对话框中是怎么拿到数据的。在表格行中添加按钮, 是个基本操作。我们来到 Info 组件。

hjh15827475896的博客 640

别再只用CANape测数据了!手把手教你用ASAP2 Studio编辑A2L文件(附MAP文件更新避坑指南)

本文深入探讨ASAP2 Studio在ECU开发中的高阶应用,特别是如何利用其编辑A2L文件并同步更新MAP文件,提升测量标定效率。文章详细解析了ASAP2 Studio的双向同步能力、MAP文件更新全流程及变量管理技巧,帮助工程师避免常见错误,优化工作流程。

weixin_26833939的博客 508

若依中按百分比打开弹窗以及获取窗口参数的动态实践

文章首先讲解如何打开窗体及动态设置窗体的大小,然后讲解如何进行父子窗体的交互,通过来讲解如何在父窗体中获取子窗体中的信息,让大家了解和掌握父子窗体的操作方法。

夜郎King的博客 7751

LED单元板驱动(HUB75接口)

开始之前先吐槽一下,搜这个的资料。要么都是Arduino,要么单片机的收费。小小的一个LED单元板,凭什么? 用Arduino是你速度快还是我ST,树莓派不好用?收费更离谱,这点东西还藏私?给你个中指凸。把原理都写出来看你怎么收费。 一、接口定义及原理 如图,有两个RGB通道,共占用6个IO。剩下的ABCDE为地址通道,LAT为行数据锁存通道,CLK为数据时钟,OE为低电平使能LED显示。图片这里没有E,证明它是16扫的,有E就会把B上面的地改为E。这样就是5位,2的5次方32扫。1.

a3748622的博客 3万+

GPT注册与使用全流程详解:从零到一的实战指南

本文详细介绍了GPT的注册与使用全流程,从认识GPT作为智能对话助手开始,到注册前的设备与环境准备、手把手完成账号注册、首次使用指南以及进阶使用技巧。文章还涵盖了安全使用与注意事项,帮助用户从零开始高效利用GPT提升工作效率和内容创作能力。

weixin_33843409的博客 391

BuildAdmin表格自定义按钮事件

* 表格右侧操作按钮 */// 渲染方式:tipButton=带tip的按钮,confirmButton=带确认框的按钮,moveButton=移动按钮title?: string: any: boolean// 自定义点击事件click?// 按钮是否显示,请返回布尔值display?}// 定义按钮组}// 传入表格构造函数{},当表格对象创建完成后,会与表格组件实例进行绑定;随后执行自定义mount。

qq_41077776的博客 1840

115.工业相机海康SDK开发指南(阅读)

包含初始化SDK和反初始化SDK接口。(由于看不到函数内部的具体实现,因此以下的解释仅代表个人的理解)

weixin_63779802的博客 5994

BuildAdmin管理员后台路由及权限节点渲染过程分析

BuildAdmin管理员后台路由渲染过程,以及权限节点的渲染过程解析。

qq_41077776的博客 2031

DINOv3实战指南:如何利用零样本视觉模型革新工业质检

本文详细介绍了如何利用DINOv3零样本视觉模型革新工业质检流程。通过无需标注数据的自监督学习技术,DINOv3能快速部署高精度检测系统,显著降低成本和提升效率。文章涵盖模型选型、数据准备、实时检测优化及典型行业解决方案,为工业质检提供革命性AI实践指南。

ansible6ops的博客 124

Altera FPGA与高速ADS4249和DAC3482的LVDS接口设计

引言:本文以TI的ADS4249(ADC)和DAC3482(DAC)之间的接口为例,介绍Altera FPGA与ADC/DAC之间的DDR LVDS接口设计以及时序约束详细设计。本文介绍的实例可方便扩展到具有类似接口格式的其他高速数据转换器设计。

FPGA_Designer 1902

buildadmin监听弹窗开关

子组件利用watch监听弹窗的打开与关闭

ㅤㅤㅤㅤ 619

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

buildadmin+tp8表格操作(4) Table组件,baTable类和 elementplus中的属性关系

在buildadmin 中,table组件是封装的 element-plus中的方法, 所以说, 在 buildadmin的table组件中,是可以通用 elementplus中的属性的以上这些属性, 在buildadmin中都是可以使用的使用方式和 elementplus el-table用法是一样的比如上例中, 我们在buildadmin中 的table 组件,去掉了网格线和斑马纹,就是在其中加入了 el-table的属性,用法一样。

hjh15827475896的博客 569

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

buildadmin实现多级关联下拉效果

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~这样,每当 roleIndexs 发生变化时,key 的值也会发生变化,从而触发组件的重新渲染。还有个问题,添加之后点击编辑,发现名称没有被很好的渲染,都是显示的key值。,也欢迎评论私信告诉我哦!

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1851

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

基于vue-element-admin管理系统的弹出层的两种展示方式

- 现状(问题): - 首先我的项目是基于(vue-element-admin)[https://panjiachen.gitee.io/vue-element-admin-site/zh/]搭建的,项目中用了快捷导航(标签页)如图所示: 但是此时每个页面内的弹窗打开时会遮罩全局,那么顶部的快捷导航存在的价值就大打折扣。我们需要的是每个弹窗只遮罩本页面,不影响页面之间的切换。所以我们项目需要将弹窗展示方式处理一下。 - 探索方案: - ...

weixin_42159569的博客 2668

BuildAdmin-v2.3.0 发布

BuildAdmin-v2.3.0 于 2025 年 5 月 10 日发布BuildAdmin-v2.3.0 在安全与算法方面的改进具有多方面的优势。

xixixixixixixi21的博客 707

vueDiff算法

【代码】vueDiff算法。

qq_35359474的博客 93

vue 表格 vxe-table 如何让下拉筛选弹窗根据屏幕自动更新位置

vxe-table 通过 filterConfig.transfer: true 将筛选面板渲染至 document.body,解决因容器 overflow: hidden 导致的面板裁剪问题。面板基于视口自动定位,空间不足时向上翻转,滚动与窗口缩放时动态更新位置,确保始终可见且不被遮挡。生效前提:列需配置 filterRender,表格需有固定高度或处于可滚动容器中。该配置为表格级设置,适用于所有启用了筛选的列。

chocolate2s的博客 253

前端登录页面的书写与验证(后端)

如果有该用户就登录成功跳转至主页,如果没有用户和密码错误就登录失败不跳转。(3)写后端代码,接受前端请求并返回数据(新建目录houduan,在houduan/index.js写入)(2)前端配置路由地址,方便登录成功后页面的跳转(在routers.js写入)输入admin和123456,就可以实现登录并跳转至主页(内容暂时没有写)了。(4)后端操作数据库拿数据(在houduan/login_bs.js写入)(1)前端代码(在login2.vue文件写入)先启动后端:在terminal终端输入以下命令。

weixin_46452278的博客 210

Razor 视图 + JavaScript + Vue/iView 组件实现的表格自定义列

本文介绍了如何在 Razor 视图项目中,通过 JavaScript 初始化 Vue 实例,并利用 iView Table 实现表格自定义列。该方案的要点是:服务端输出列定义和行数据,前端将列配置转换为响应式数据,用户通过勾选或拖拽控制列的显隐与顺序。通过本地存储保存用户偏好后,表格自定义列还能在多次访问中保持一致,提升系统的易用性。

qq_59041750的博客 308

Vue3——第 14 篇:生命周期钩子——从创建到销毁的全过程

Vue 3 生命周期钩子是组件在创建、挂载、更新、卸载等阶段自动执行的函数,提供精准控制时机。核心钩子包括 onMounted(DOM 操作与数据请求)、onUpdated(更新后处理)、onBeforeUnmount(资源清理)等。合理使用可优化性能、管理副作用,提升应用稳定性。

810cheng 280

Vue 编译器换掉 source map,快了三四成

Vue 核心仓库中,johnsoncodehk 提出一项关键性能优化 PR(#16126),重构编译器 source map 生成机制,实现 CPU 降低 30%、内存减少 40%,修复十余个报错指错行问题。新方案摒弃旧有双轨映射,改用片段自带来源范围,提升准确性与效率。虽引入破坏性改动(移除 MagicString 导出),影响部分工具链,但已通过生态测试验证。该变更将进入小版本,对构建工具开发者尤为值得关注。PR 地址

前端之虎陈随易 204

全栈 AI 问答应用开发:FastAPI 异步推理与 Vue 流式渲染实战

原生 EventSource 无法传递复杂请求体,后端同步推理易阻塞事件循环,前端流式解析常遇半包与乱码。FastAPI 的 async def 路由中若直接执行同步推理,事件循环会被瞬间独占,导致并发请求全面排队。思路:原生 EventSource 只能发 GET 请求,无法在请求体中传递复杂的 JSON 上下文,也不支持自定义鉴权头,无法满足多轮对话需求。前端粘包与乱码:TextDecoder 必须带 { stream: true },且必须使用 buffer 变量按 \n\n 拼接未闭合数据。

2402_85729970的博客 288

Django 权限系统项目实战详细图文教程 6--系统主页功能实现 2

6、Django 权限系统项目实战详细图文教程 6--系统主页功能实现 2

测试开发 204

用 Go + Edge 把 `dist` 变成双击即用的 exe,Vue 桌面应用打包器

用 Go + Edge 把 `dist` 变成双击即用的 exe

weixin_55636632的博客 390

Vue 前端开发 AI 对话页面:流式消息渲染、文件上传

关键点是不能手动设置 Content-Type 为 multipart/form-data,必须由浏览器自动生成带有 boundary 的请求头,否则后端无法解析。思路:将对象序列化为 JSON 字符串,作为 FormData 的一个普通字段(如 formData.append(‘payload’, JSON.stringify(data))),后端接收该字段后再反序列化。若上传大文件(>10MB),需实现独立的分片上传接口,在提交对话前先获取文件 id 或 url,再随文本发送引用。移除输入框的禁用态;

2402_85729970的博客 390
上一篇: 我攻克的技术难题 - BuildAdmin11:弹出框的出现位置和标签禁用小skill
下一篇: 什么是MCP?本地如何开发MCP Server
叫我阿柒啊
博客等级 码龄9年 2433粉丝 2369原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值