Uniapp中的事件处理:uni.emit和uni.on/uni.once

news/2024/7/7 21:54:12

介绍

在Uniapp项目中,事件处理是一种重要的通信方式。uni.emituni.on(以及uni.once)是Uniapp中用于实现组件间通信的两个关键方法。本文将深入介绍这两个方法,探讨它们的优势、劣势,并通过示例代码演示它们的用法。

uni.emit 方法

uni.emit是用于触发自定义事件的方法。通过这个方法,你可以在一个组件中触发事件,并在其他组件中监听并处理这个事件。

使用方法

// 在组件A中触发事件
uni.emit('customEvent', { data: 'Hello from Component A' });

// 在组件B中监听事件
uni.on('customEvent', (event) => {
  console.log(event.data); // 输出: Hello from Component A
});

uni.on 和 uni.once 方法

uni.on用于监听自定义事件,而uni.once则是只监听一次。这两者用于在组件中捕获并处理其他组件触发的事件。

使用方法

// 在组件B中监听事件
uni.on('customEvent', (event) => {
  console.log(event.data); // 输出: Hello from Component A
});

// 或者使用 uni.once,只监听一次
uni.once('customEvent', (event) => {
  console.log(event.data); // 输出: Hello from Component A
});

优势劣势分析

优势

  • 简单易用: uni.emituni.on提供了简单而直观的事件处理机制,方便开发者实现组件间的通信。

  • 解耦组件: 通过事件的方式,可以实现组件的解耦,使得组件之间的通信更加灵活。

劣势

  • 全局污染: 使用全局事件总线可能导致全局污染,因为所有组件都共享同一个事件空间。

  • 调试困难: 跨组件事件的传递可能使调试变得复杂,特别是在大型项目中。

示例代码演示

考虑一个简单的场景,有两个组件A和B,需要在A中的按钮点击时触发B中的某个方法。

Component A

<template>
  <view>
    <button @tap="triggerEvent">Click me</button>
  </view>
</template>

<script>
export default {
  methods: {
    triggerEvent() {
      uni.emit('customEvent', { data: 'Hello from Component A' });
    }
  }
};
</script>

Component B

<template>
  <view>
    <p>Component B</p>
  </view>
</template>

<script>
export default {
  mounted() {
    uni.on('customEvent', (event) => {
      console.log(event.data); // 输出: Hello from Component A
      this.handleCustomEvent();
    });
  },
  methods: {
    handleCustomEvent() {
      // 处理事件的业务逻辑
      console.log('Handling custom event in Component B');
    }
  }
};
</script>

总结

uni.emituni.on提供了一种方便的组件通信方式,使得组件之间的耦合度降低,开发更加灵活。然而,开发者在使用时应注意全局污染和调试困难的问题,合理选择适合项目的通信方式。

希望本文对Uniapp中的事件处理有所帮助!如果有任何问题或建议,欢迎留言讨论。

🚀 Happy coding! 🎉


http://lihuaxi.xjx100.cn/news/1803860.html

相关文章

pytest与unittest对比

1.unittest测试文件以test开头&#xff0c;测试方法以test开头&#xff1b;pytest测试文件以test开头&#xff0c;测试类以Test开头&#xff0c;方法以test开头 2.unittest执行&#xff0c;需要使用unittest类提供的discover方法&#xff0c;收集测试套件&#xff0c;然后通过b…

BUUCTF [GXYCTF2019]佛系青年 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 密文&#xff1a; 下载附件&#xff0c;解压得到ZIP压缩包。 解题思路&#xff1a; 1、压缩包内有一张png图片和一个txt文本&#xff0c;解压zip压缩包&#xff0c;解压出图片&#xff0c;但txt文本提示需要输入密…

python引入自己不同目录的模块

1.目录结构 from manual_data.utils import delete_and_insert_center

一次显著的接口性能优化,从10s优化到0.9s

最近在登录项目后台的时候&#xff0c;发现当我输入账号和密码后&#xff0c;竟然就卡在了 Loading 页面。。 加载了10S才进后台 等了足足 10S 才进去后台&#xff01; 通过 F12&#xff0c;打开 Network 网络请求一看&#xff0c;竟然是因为有两个接口返回的数据太慢了&#…

Rust用宏实现参数可变的函数

文章目录 声明式宏参数可变的求和函数 Rust系列&#xff1a;初步⚙所有权⚙结构体和枚举类⚙函数进阶⚙泛型和特征⚙并发和线程通信⚙cargo包管理 声明式宏 Rust中宏的概念与C/C中相类似&#xff0c;是编译期间执行的一系列指令。但和C语言相比&#xff0c;Rust中的宏&#x…

安装JumpServer

安装JumpServer 吹个牛批这是我师哥写的JumpServer&#xff0c;同一个老师&#xff0c;就是我有点废物其余的没啥 JumpServer属于堡垒机&#xff0c;openvpn属于跳板机 跳板机概述 跳板机就是一台服务器&#xff0c;开发或运维人员在维护过程中首先要统一登录到这台服务器&a…

一文搞懂RC滤波器的设计?

滤波器是一种可以对“波”进行过滤的器件&#xff0c;一般是特定频率的信号。所以可以常常看到滤波器的种类繁多&#xff0c;有高通滤波器&#xff0c;低通滤波器&#xff0c;带通滤波器及带阻滤波器等等。 滤波器的主要作用就是滤波&#xff0c;它需要尽可能的让有用信号能够做…

Python算法——树的子树

Python中的树的子树判定算法详解 树的子树判定是指判断一个树是否是另一棵树的子树。在本文中&#xff0c;我们将深入讨论树的子树判定问题以及如何通过递归算法来解决。我们将提供Python代码实现&#xff0c;并详细说明算法的原理和步骤。 树的子树判定问题 给定两棵二叉树…