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

Uni-App知识点

文章目录

  • 一、事件总线
  • 二、什么是事件总线
  • 三、触发事件
    • 1、监听事件
    • 2、只监听一次
    • 3、移除监听
    • 4、触发事件注意事项
    • 5、代码示例
    • 6、注意事项

一、事件总线

除了父子组件传参之外,兄弟组件之间共享信息也是我们经常会遇到的。如果遇到这类问题,我们现在可以借助vuex,或者把数据统一放在他们父组件中处理。这两种方式都可以解决兄弟组件传递信息的问题。我们今天要介绍的是另一种方式-事件总线,事件总线也是我们开发过程中经常会用到的一种开发模式。

二、什么是事件总线

事件总线可以作为组件沟通的桥梁,就像是所有组件共用相同的事件中心,可以向该中心注册发送事件或接收事件,所以组件都可以上下平行地通知其他组件,但也就是太方便所以若使用不慎,就会造成难以维护的灾难,因此才需要更完善的Vuex作为状态管理中心,将通知的概念上升到共享状态层次。

三、触发事件

在uni中可以通过uni.$emit(eventName,OBJECT)来触发全局的自定事件。附加参数都会传给监听器回调。
代码示例

uni.$emit('update',{msg:'页面更新'})

1、监听事件

uni.$on(eventName,callback)
监听全局的自定义事件。事件可以由 uni.$emit 触发,回调函数会接收所有传入事件触发函数的额外参数。
代码示例

uni.$on('update',function(data){console.log('监听到事件来自 update ,携带参数 msg 为:' + data.msg);
})

2、只监听一次

uni.$once(eventName,callback)
监听全局的自定义事件。事件可以由 uni.$emit 触发,但是只触发一次,在第一次触发之后移除监听器。
代码示例

  uni.$once('update',function(data){console.log('监听到事件来自 update ,携带参数 msg 为:' + data.msg);})

3、移除监听

uni.$off([eventName, callback])
移除全局自定义事件监听器

4、触发事件注意事项

  • 如果没有提供参数,则移除所有的事件监听器;
  • 如果只提供了事件,则移除该事件所有的监听器;
  • 如果同时提供了事件与回调,则只移除这个回调的监听器;
  • 提供的回调必须跟$on的回调为同一个才能移除这个回调的监听器;

5、代码示例

$emit$on$off常用于跨页面、跨组件通讯,这里为了方便演示放在同一个页面

<template><view class="content"><view class="data"><text>{{val}}</text></view><button type="primary" @click="comunicationOff">结束监听</button></view></template><script>export default {data() {return {val: 0}},onLoad() {setInterval(()=>{uni.$emit('add', {data: 2})},1000)uni.$on('add', this.add)},methods: {comunicationOff() {uni.$off('add', this.add)},add(e) {this.val += e.data}}}</script><style>.content {display: flex;flex-direction: column;align-items: center;justify-content: center;}.data {text-align: center;line-height: 40px;margin-top: 40px;}button {width: 200px;margin: 20px 0;}</style>

6、注意事项

  • uni.$emituni.$onuni.$onceuni.$off 触发的事件都是 App 全局级别的,跨任意组件,页面,nvue,vue 等
  • 使用时,注意及时销毁事件监听,比如,页面 onLoad 里边 uni.$on 注册监听,onUnload 里边 uni.$off 移除,或者一次性的事件,直接使用 uni.$once 监听
  • 在vue中也可以通过EventBus(事件总线)的方式进行兄弟组件的传值
http://www.lryc.cn/news/249669.html

相关文章:

  • Postman如何使用(四):接口测试
  • 【Qt绘图】之绘制坦克
  • 【机器视觉技术栈】- 机器视觉基础
  • Arkts开发UIAbility组件生命周期启动模式开发详解【鸿蒙专栏-19】
  • 力扣295. 数据流的中位数(java,堆解法)
  • open3d-点云及其操作
  • 无人机助力电力设备螺母缺销智能检测识别,python基于YOLOv7开发构建电力设备螺母缺销高分辨率图像小目标检测系统
  • 如何使用Python的Open3D开源库进行三维数据处理
  • HarmonyOS应用开发者基础认证试题
  • Android Camera2开启电子防抖(EIS)和光学防抖(OIS)
  • 劲爆:Sam Altman 回归CEO专访确认Q*的存在
  • Electronica慕尼黑电子展 Samtec团队与21ic分享虎家产品与方案
  • Vue基本使用(一)
  • Android:BackStackRecord
  • 微信小程序 slider 翻转最大和最小值
  • APITable免费开源的多维表格与可视化数据库本地部署公网远程访问
  • 配电房综合监控系统
  • 【JavaSE】集合(学习笔记)
  • Mybatis 的简单运用介绍
  • python的itertools库
  • STM32/GD32_分散加载
  • go clean
  • BUUCTF [ACTF新生赛2020]swp 1
  • 【PTA题目】7-4 缩写期刊名 分数 10
  • 什么是 TLS/SSL 握手
  • 和鲸科技与国科环宇建立战略合作伙伴关系,以软硬件一体化解决方案促进科技创新
  • [C++]六大默认成员函数详解
  • 组合(回溯算法)
  • 力扣:1419. 数青蛙
  • java_springboot企业人事考勤请假管理信息系统rsglxx+jsp