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

slot=“trigger“ 覆盖了组件内部的 ref=“trigger“【详细来龙去脉版 5min】

写后台管理项目的时候碰见这个问题的。

先看代码:

<div class="r-content"><el-dropdown><span class="el-dropdown-link"><img :src="getImageUrl" class="avatar"></span><template #dropdown><el-dropdown-menu><el-dropdown-item @click="handleUpdateAvatar">修改头像</el-dropdown-item><el-dropdown-item @click="handleLoginOut">退出登录</el-dropdown-item></el-dropdown-menu></template></el-dropdown><el-uploadclass="avatar-uploader"action="#":show-file-list="false":on-change="handleFileChange":before-upload="beforeAvatarUpload"style="display: none;"ref="uploadRef"><el-button slot="trigger" size="large" type="primary">选取文件</el-button></el-upload></div>

el-upload是根据style进行了隐藏操作,我误以为的实现修改头像的逻辑:

点击“修改头像”的按钮-->触发函数handleUpdateAvatar-->执行函数体uploadRef.value.$refs.trigger.click();-->我以为这算是点击了“选取文件”这个按钮-->然后触发el-upload的on-change事件,也就是handleFileChange函数。。。。。。

但是控制台报错了,我非常不解。

于是我问豆包ai,才发现这里按钮上写的的插槽slot是trigger,在el-upload的组件内部也有一个默认的按钮,它有个属性是ref,值是trigger,所以这个插槽在这里的作用就是替换el-upload内部的这个默认的按钮,那么原先的按钮是有ref属性的,但是替换后的这个新按钮是没有ref属性的,所以我的函数体想要执行uploadRef.value.$refs.trigger  发现根本没有ref值为trigger的实例对象啊,于是就报错。

我第一次深刻的认识到这问题,如此的复杂,给我整的怕怕的。。。。。算是我深刻认识到了slot的运行机制吧。

看一下豆包姐姐的原文:

这句话说的很好!组件内部的ref=trigger是硬编码的,不会因为你使用插槽而自动的把ref=trigger绑定在新添加进来的按钮上,换句话说就是非常的忠诚!跟着人家走了!一起消失!

反正这个refs和插槽我跟你没完。

http://www.dtcms.com/a/284077.html

相关文章:

  • 网络服务(设置邮箱发送告警功能,每1分钟发送一封邮件)
  • CMake综合学习1: Cmake的模块化设计
  • vue3实现web端和小程序端个人签名
  • 《迭代器 VS 生成器:Python 惰性计算的两种实现方案详解》
  • Zabbix 分布式监控系统架构设计与优化
  • 硅谷顶级风投发布《2025年AI实战手册》|附下载
  • 芯谷科技--双四通道模拟/数字多路复用器74HC4052
  • Tcpdump使用
  • linux_线程同步
  • 七彩喜跌倒检测仪:用科技编织银发安全的“隐形防护网”
  • 【Mobx】学习笔记
  • Python-多线程编程
  • 时序数据库
  • AWS WebRTC:RTP讲解
  • GitHub开源轻量级语音模型 Vui:重塑边缘智能语音交互的未来
  • onenote千年老bug,字体bug (calibri微软雅黑) 的解决
  • Spring之【BeanDefinition】
  • MyBatis之核心组件与配置详解
  • LVDS系列21:Xilinx 7系ISERDESE2原语(二)
  • Amazon发布Kiro AI IDE
  • Kali Linux 信息收集完全指南:从原理到实战
  • 月结7-CO模块月结关键点和步骤总结
  • EP-SPY 基於GI6E 編碼無線電通訊間諜工具
  • 串口232通讯数据传输丢失的原因、不可靠性及底层原理分析
  • 从高斯噪声的角度分析MAE和MSE
  • Mac 安装及使用sdkman指南
  • Java全栈面试实录:从电商支付到AIGC的深度技术挑战
  • YOLOv3 技术深度解析:从理论到实践的完整指南
  • Clip微调系列:《MaPLe: Multi-modal Prompt Learning》
  • kong是什么