首页 > 其他分享 >uni-app上下级页面数据双向通信

uni-app上下级页面数据双向通信

时间:2024-06-12 19:22:02浏览次数:21  
标签:app 双向通信 eventChannel Hello uni event 页面

前情

最近在做小程序项目,选用是当前比较火的uniapp技术栈,经常会遇到页面间消息传递的需求。

为什么要这么做?

uniapp页面间数据通信方式有很多:通过url传参,状态管理库vuex/pinia,本地存储,事件通道eventChannel,EventBus等。

这次的需求是在A面点击一个按钮跳转到B页面拾取一个数据选项再返回A页面用B页面拾取的数据做接下来逻辑处理,前面文章我有介绍通过EventBus来做这种数据传递,今天介绍通过uni.navigateTo的events参数和this.getOpenerEventChannel()来实现父子页面双向通信。

实现代码

A页面

<template>
  <view>
    <text>我是A页面</text>
	  <button @click="gotoPageB">点我去B页面</button>
  </view>
</template>

<script>
export default {
  methods: {
	  gotoPageB() {
		  uni.navigateTo({
				url: '/pages/pageB/pageB',
				events: {
					pageDataFormA:(event) => {
						this.handleCustomEvent(event);
					}
				},
				success: function(res) {
					// 通过eventChannel向被打开页面传送数据
			    res.eventChannel.emit('dataFromB', { data: 'Hello from Component B' })
				}
			});
	  },
    handleCustomEvent(event) {
	    console.log(event.data); // 输出: Hello from Component B
      // 处理事件的业务逻辑
      // ...
    }
  }
};
</script>

B页面

<template>
  <view>
	  <text>我是B页面</text>
    <button @tap="triggerEvent">点我</button>
  </view>
</template>

<script>
export default {
  methods: {
    triggerEvent() {
      this.eventChannel.emit('pageDataFormA', { data: 'Hello from Component B' })
      uni.navigateBack();
    },
    handPageBdata(event) {
	    console.log(event.data); // 输出: Hello from Component A
      // 处理事件的业务逻辑
      // ...
    }
  },
  onl oad(){
	  this.eventChannel = this.getOpenerEventChannel();
	  this.eventChannel.on('dataFromB', (event) => {
		  this.handPageBdata(event);
	  });
  }
};
</script>

实例演示:

思考

其实这种方式是特意为这种父子级页面做数据传递准备的,像eventBus的使用范围更更广,如果你也有这种父子级页面数据通信的要求,这种方式比EventBus更适合,你可以在项目中试一试,但是uni-app版本大于2.8.9的时候才可以使用,我写这篇文章的时候uniapp版本已到了4.15,兼容问题我感觉可以忽略,如实在担心有兼容那就还是用EventBus吧。

官方文挡的详细介绍:uni.navigateTo(OBJECT) | uni-app官网 (dcloud.net.cn)

标签:app,双向通信,eventChannel,Hello,uni,event,页面
From: https://www.cnblogs.com/xwwin/p/18244561

相关文章

  • Unit 6 - Disappearing Through The Skylight
    Unit6-DisappearingThroughTheSkylightDisappearingThroughTheSkylightOsborneBennettHardisonJr.Scienceiscommittedtotheuniversal.Asignofthisisthatthemoresuccessfulasciencebecomes,thebroadertheagreementaboutitsbasicconcept......
  • 关于Android切换系统字体大小和字体样式导致App崩溃或者界面错乱的问题
    测试小姐姐测试版本的时候,把系统字体给变大了,再回到app直接崩溃,分析原因找问题,主要有2种方式第一种.设置字体大小我们都是用的是sp,如果改为dp就不会有这个问题,我相信大部分写android的都是用的sp,现在改回来肯定是头痛,别着急,我们先看看源码 publicstaticfloata......
  • Apple ID已成历史,在ios18中正式更名为Apple Account
    随着iOS18的首个开发者预览版成功推送,众多热衷于尝鲜的用户已纷纷升级并开启全新体验。在这个版本中,备受瞩目的AppleID正式迎来了它的进化——更名为AppleAccount,并且拥有了中文名称“Apple账户”或简称“苹果账户”。不过目前官网还称之为AppleID,预计会在9月份随iPhone......
  • uniapp vue3 实现自定义Switch效果
    <template><viewclass="container"@click="toggleSwitch"><label:class="isOn?'switch-checked':'switch-nochecked'"><viewclass="open">{{activ......
  • uniapp小程序,携带参数返回上一页
    功能介绍:这是我在开发微信小程序时实现的一个功能,在提交订单页面(A页面)点击设置收货地址跳转到地址列表页面(B页面)去选择地址后回退到订单页面并显示所选择的地址。具体实现:<!--HTML结构不完整,仅做参考,部分类名为作者项目中的配置--><viewclass='addressCon'v-if......
  • applitools eyes 基于视觉检查的自动化测试
    Applitools是一家专注于视觉AI的自动化测试和监控解决方案的公司,其核心产品围绕着视觉回归测试和UI测试。ApplitoolsEyesApplitoolsEyes是其旗舰产品,是一个基于AI的自动化测试工具,专注于检测和修复UI错误。它使用视觉AI来识别界面的变化,并能够跨不同浏览器和设备进行比较,确......
  • 短剧对接广告联盟app平台开发源码
    短剧对接广告联盟APP平台开发的源码涉及多方面的技术整合与策略设计。以下是一些关键步骤和考虑因素:需求分析:深入理解短剧APP的市场定位、目标用户群体以及广告联盟的具体需求。这有助于确定系统的基本功能和特色服务,确保开发的APP能够满足用户和广告主的实际需求1。系统......
  • 【APP移动端自动化测试】第二节.Appium介绍和常用命令代码实现
    文章目录前言一、Appium介绍和安装二、python代码功能实现   2.1helloappium参数详解   2.2在脚本内启动其他app   2.3 获取app的包名和界面名   2.4 关闭app和驱动对象   2.5 安装和卸载以及是否安装app   2.6 将应用置于......
  • SSM-小区物业管理系统-48954(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP、爬虫、
    基于SSM小区物业管理系统摘要随着计算机科学技术日渐成熟,人们已经深刻认识到了计算机功能的强大,计算机已经进入到了人类社会发展的各个领域,并且发挥着十分重要的作用。每个社区的物业管理是一项系统而复杂的工作,它需要一个团队互相配合、分工协作。在该领域,传统的手工存取......
  • Unix socket lock file is empty /var/run/mysqld/mysqld.sock.lock
    介绍当使用MySQL数据库时,有时候会遇到一个错误信息,提示“Unixsocketlockfileisempty:/var/run/mysqld/mysqld.sock.lock.”这个错误一般是由于MySQL服务器无法启动造成的。在本文中,我们将探讨这个错误的原因和解决方案。错误原因/var/run/mysqld/mysqld.sock.lock......