当前位置: 首页 > 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 事件,可以将所有依赖异步数据的初始化逻辑集中处理。

相关文章:

  • [C++][设计模式] : 单例模式(饿汉和懒汉)
  • 2.监控领域中行业黑话知识学习指南
  • 使用Ollama+open-webui搭建本地AI模型
  • 写实交互数字人:赋能消防知识科普,点亮智能交互讲解新未来
  • word表格批量转excel,提取表格数据到excel
  • SpringBoot+Junit在IDEA中实现查询数据库的单元测试
  • ⭐ Unity 实现屏幕涟漪效果:自动生成 \ 点击交互生成涟漪
  • 基于OpenCV和深度学习实现图像风格迁移
  • 分布式光纤测温及红外测温系统的区别?
  • 68、.NET Entity Framework(EF)
  • 每日Prompt:宫崎骏风格插画
  • YOLOv2 技术详解:目标检测的又一次飞跃
  • 大模型Prompt|提示工程的10个常见设计模式
  • 【数据传输常用命令】:docker常用命令
  • 1.ES介绍
  • Three.js搭建小米SU7三维汽车实战(4)场景搭建
  • Eureka 服务注册与发现原理和使用
  • 常见的几种排序算法
  • 预训练CNN网络的迁移学习(MATLAB例)
  • webgl工程发布问题解决记录
  • vs做的网站排版错位/免费网站建设seo
  • 网站建设公司营业执照/海外营销公司
  • 临淄区住房和城乡建设局网站/友链交易交易平台
  • 青岛国家高新区建设局网站/网络推广公司排行榜
  • 学习制作网页的网站/网站权重排名
  • 网站建设合同 简单/seo工具在线访问