当前位置: 首页 > news >正文

Vue3+el-menu 递归 emit失效

背景:添加快捷菜单功能,用到了递归组件。在最后一层添加按钮,点击时触发emit,在父组件中监听自定义事件。但自定义事件未执行。

代码:

// 父组件
<el-menu><quick-menu-item v-for="routes in menuList" :key="routes.id" :item="routes" @clickBtn="getItem" />
</el-menu>const getItem = item => {console.log('getItem', item)
}// 子组件 QuickMenuItem.vue
<template><el-sub-menu v-if="props.item?.children?.length" :index="props.item.id"><template #title> {{ props.item.name }}</template><quick-menu-itemv-for="child in props.item?.children":key="child.id" :item="child" /></el-sub-menu><el-menu-item v-else>{{ props.item.name }}<el-button link @click="clickBtn(props.item)">点击</el-button></el-menu-item>
</template>const emit = defineEmits(['clickBtn'])
const clickBtn = item => {emit('clickBtn', item)
}

首先,如上述代码,直接emit,getItem() 方法并未执行。

其次,借鉴了 vue2 递归组件中,加 v-on="$listeners",可实现功能。vue3 $listeners 被移除,合并到$attrs身上。做了如下尝试:

<quick-menu-item 
    v-for="child in props.item?.children" 
    :key="child.id" 
    :item="child" 
    v-bind="$attrs" 
/>

然而很遗憾,同样未执行getItem() 方法。

最后,直到看到有个回答说直接写,直接写?

<quick-menu-item v-for="child in props.item?.children":key="child.id":item="child" @clickBtn="clickBtn"
/>

 结果,getItem() 方法 成功执行。事情解决。

思考:如果有多个事件需要触发,有没有更好的方式?而非直接添加多个事件方式?

The end.

相关文章:

  • 掌握MATLAB仪器控制工具箱:自动化测试与数据采集的利器
  • python的 __name__和__doc__属性
  • 测温传感器应用
  • 基于TypeScript+React+AntDesign 的车辆车型管理页面
  • 相亲交友系统的社会影响:家庭结构的变化
  • mysql索引 -- 全文索引介绍(如何创建,使用),explain关键字
  • 《AI时代程序员的核心技能升级之路》
  • LInux操作系统安装Jenkins
  • Kafka技术详解[5]: 集群启动
  • 修改 idea 的 Terminal 命令窗口使用 git-bash
  • 计算机网络33——文件系统
  • 动态规划算法:13.简单多状态 dp 问题_打家劫舍II_C++
  • Meta广告资料库使用教程:Facebook、Instagram海外社媒营销统统拿下!
  • BEV学习---LSS4-模型训练
  • C++语法—引用
  • 【技术性】Search知识
  • 230. Kth Smallest Element in a BST
  • C++类的相互关联
  • co模块的前端实现
  • exif信息对照
  • Javascript编码规范
  • JAVA多线程机制解析-volatilesynchronized
  • LeetCode29.两数相除 JavaScript
  • Mybatis初体验
  • MySQL主从复制读写分离及奇怪的问题
  • spring + angular 实现导出excel
  • vue学习系列(二)vue-cli
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 诡异!React stopPropagation失灵
  • 06-01 点餐小程序前台界面搭建
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • mysql面试题分组并合并列
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​香农与信息论三大定律
  • #{} 和 ${}区别
  • (C语言)逆序输出字符串
  • (C语言)字符分类函数
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (二)原生js案例之数码时钟计时
  • (二十四)Flask之flask-session组件
  • (附源码)php新闻发布平台 毕业设计 141646
  • (回溯) LeetCode 40. 组合总和II
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .net 4.0发布后不能正常显示图片问题
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net8.0与halcon编程环境构建
  • @Mapper作用
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @RequestBody与@ModelAttribute
  • @RequestBody与@RequestParam:Spring MVC中的参数接收差异解析
  • [2023-年度总结]凡是过往,皆为序章