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

Vue 中 this.$emit(‘mount‘) 的妙用

在 Vue 开发中,$emit 常用于父子组件通信,但你是否见过组件内自己触发并监听事件的写法?例如在一个组件的 created 钩子中调用 this.$emit('mount'),然后在 mounted 中通过 this.$on('mount', ...) 监听该事件。这种模式看似奇怪,实则隐藏了异步逻辑的协调智慧。本文将深入剖析这种设计的使用场景、潜在问题与优化方案。

一、代码
以下是一个典型的案例(来自真实代码):

// 1. 在 created 钩子中,异步获取数据后触发 mount 事件
created() {Promise.all([...]).then(res => {this.date = res[0].minDate;this.$emit('mount'); // 数据就绪后触发事件})
}// 2. 在 mounted 钩子中监听 mount 事件
mounted() {this.$on('mount', async () => {// 设置表单默认值、加载列表this.getList();});
}

二、这种模式的核心作用
1. 解决异步依赖问题
在 created 钩子中,组件通过 Promise.all 异步加载数据(如部门列表、部署时间等)。
在 mounted 钩子中,组件的 DOM 已挂载,但需要依赖异步加载的数据来初始化表单或加载表格。
通过 $emit('mount'),确保数据就绪后才执行后续逻辑,避免因数据未加载导致的空值错误。
2. 替代复杂的侦听器(Watch)
如果直接使用 watch 监听多个数据的变化,代码会变得复杂:
JavaScript
 watch: {
 // ... 多个字段需要监听
 }
而通过一个 mount 事件,可以将所有依赖异步数据的初始化逻辑集中处理。

http://www.xdnf.cn/news/1006165.html

相关文章:

  • 如何在 Discourse AI 中设置 Gemini API
  • 多串口卡使用
  • 软件测试BUG
  • 【小工具】-Doxygen01
  • slam--非线性优化
  • BEV和OCC学习-8:mmdet3d 3D分割demo测试
  • 如何利用单细胞转录组进行细胞图谱和疾病机制研究?
  • 爬虫实践:TOP250电影数据
  • 从数学到代码:一文详解埃拉托色尼筛法(埃式筛)
  • 阳台光伏防逆流电表革新者:安科瑞ADL200N-CT/D16-WF
  • ref 应用于对象类型的一个案例
  • CKA考试知识点分享(11)---CRD
  • JavaScript DOM 操作与事件处理全解析
  • BeanUtil.copyProperties()进行属性拷贝时如何忽略NULL值——CopyOptions配置详解
  • 高效管理Python环境:Miniforge、pyenv和Poetry深度对比与应用
  • 建筑业应用:机器人如何改变未来建筑业发展方向
  • 介绍一下 TCP方式程序的通讯,服务器机与客户机
  • 使用 DeepSeek 为 TDengine 创建专属知识库
  • 部署安装maven和mvnd
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | RandomChoicePicker(标签生成)
  • 西门子PLC读取梅安森风压传感器数据
  • 【2025】深度学习环境搭建记录
  • inet_addr()和inet_aton()函数详解
  • 【log4j2】将运行时变量注入日志、附性能对比与生产案例(动态日志实战)
  • JFLASH 提示license 配置操作 Sorry,no valid license for I-Flash found.
  • Trae重磅升级
  • Python 字典
  • 第六节 工程化与高级特性-TS配置选项解析
  • AUTOSAR图解==>AUTOSAR_TR_InteroperabilityOfAutosarTools
  • Rust 通用代码生成器:莲花,红莲尝鲜版三十六,哑数据模式图片初始化功能介绍