uniApp页面通讯大汇总,如何页面之间传值

news2024/12/26 23:11:29

文章目录

  • 往期回顾
  • 页面通讯
    • 出现场景
    • 通讯方案
      • 通讯方案小结
    • 如何父传子
      • 页面跳转时序图
    • uni.\$on和eventChannel.on使用推荐

往期回顾

uniapp 踩坑记录 uni.$on为什么不能修改data里面的数据

页面通讯

出现场景

我们在一个页面往另一个页面跳转的时候,希望跳转的页面的参数是动态生成的,可以复用的。比如我们在逛淘宝的时候,我们点击一个商品,进去就是商品的详情页。商品和商品详情页的对应关系就需要商业页面给商品详情页面传递商品的信息参数

点击对应商品
传递对应的商品信息
商品列表
商品详情页

而且有时候我们甚至希望能传递多个通讯信息。这样跳转的页面就可以提供更加差异化的复制功能。

通讯方案

序号通讯方法方法名优点缺点适用场景
1页面缓存uni.setStorage(OBJECT)
uni.getStorage(OBJECT)
全局缓存,下次打开依然存在,存取方便,官方自带同步异步缓存方法不适合页面通讯,使用频次低的缓存。因为数量多了不好管理全局的动态变量,例如用户名,用户等级,用户权限等
2Vue全局变量vue.prototype.key=一次设置,全局使用同页面缓存封装好的方法
3路由通讯uni.navigateTo(OBJECT)通过跳转的在url里面添加?key=value设置变量,在onLoad里面取出变量。使用方便需要自己将对象转化为url对应参数,而且对象深度只能为一层,url长度有限制跳转页面传递简单变量
4页面通讯uni.$emit(eventName,OBJECT)
uni.$on(eventName,callback)
使用key进行通讯,可以多次通讯而不是打包一起通讯,方便业务迭代key值管理问题,会和全局通讯,容易误触发其它页面全局通讯,页面通讯
5通道通讯,事件通讯EventChannel.emit(string eventName, any args)在路由跳转的success里面实现通讯只能1对1页面通讯,不能全局通讯跳转页面通讯

通讯方案小结

通讯总体分类通讯方法序号通讯特点
直接通讯3,4,5直接页面传值通讯,适用于局部通讯和页面唤醒
间接通讯1,2通过修改和读取全局变量,适合全局静态变量

uni.$emit和EventChannel.$emit的区别

uni.$emitEventChannel.$emit
父传子在success里面回调在success里面回调
子传父任意位置在event里面回调
作用域全局,直到被销毁局部,页面销毁即结束
声明简洁稍微有点复杂
使用注意如果是uni.on注册的监听器需要页面退出时销毁无需注意

如何父传子

父传子我看了很久,才从官方文档里面找到父传子的方法。
在这里插入图片描述

页面跳转时序图

A B 页面跳转 页面生成 跳转成功回调函数 A B

以为触发器需要在声明之后才能触发,所以我们需要在回调函数里面触发

A B 页面跳转 页面生成 设置key触发器 跳转成功回调函数 触发key触发器 A B

实际代码

//A页面
uni.navigateTo({
	url: url,
	success(res) {
		console.log('回调函数')
		uni.$emit('test',{ value:'页面通讯测试' })//页面通讯
		res.eventChannel.emit('test_data', {value:'通道通讯测试'})//通道通讯
	}
})

//B页面

onLoad() {
	console.log('页面跳转成功')
	uni.$once('test',res=>{
		console.log('通讯成功!')
		console.log(res)
	})
	const eventChannel =this.getOpenerEventChannel()
	eventChannel.on('test_data',res=>{
		console.log(res)
		
	})
}

uni.$on和eventChannel.on使用推荐

两者使用起来其实差不多,都可以达到父传子,子传父的作用。但是因为作用域的原因,evenetChannel在不同页面的变量可以重名,eventChannel更适合父传子,uni.$on适合子传父

eventChannel
uni.emit
eventChannel
uni.emit
子1
子2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/615024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

golang实现webgis后端开发

目录 前言 二、实现步骤 1.postgis数据库和model的绑定 2.将pg库中的要素转换为geojson (1)几何定义 (2)将wkb解析为几何类型 (3)定义geojson类型 (4)数据转换 (5)数据返回 2.前端传入的geojson储存到数据库 3、其他功能实现 总结 前言 停更了…

从java直接上手SpringBoot【CTGU启明星】

本文适合刚刚学完java包括面向对象的同学,直接上手SpringBoot教程。 一、写在前面 先说说为什么这样做,现在主流的java后端学习是 面向对象->ssm框架->SpringBoot 其间还穿插数据库的学习,例如MyBatis等。 但是我们认为从项目入手…

来自腾讯AI实验室的Real-ESRGAN将模糊老照片和视频修复成高清晰(一些错误处理)

Real-ESRGAN:Enhanced Super-Resolution GAN:增强的超分辨率的对抗生成网络,对于GAN相信大家都比较熟悉,前有阿尔法狗,现有很多GAN的延伸版本,StyleGAN1~3系列以及DragGAN对于图片的生成和编辑,出来的效果都…

Tomcat顶层架构、服务部署、虚拟主机配置

Tomcat顶层架构、服务部署、虚拟主机配置 一、Tomcat概述1、Tomcat介绍2、Tomcat三个核心组件3、Java Servlet4、JSP 二、Tomcat顶层架构三、Tomcat请求过程四、Tomcat服务部署1、关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下2、安装JDK3、设置JDK环境变量4、…

Java中导出Excel步骤总结(案例学习)

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、…

怎么把伴奏提取出来?分享两个方法给大家~

对于音乐制作人和音乐爱好者而言,创作个人音乐作品是一项令人兴奋的体验。然而,有时我们希望使用一首现有歌曲的伴奏来创作自己的音乐作品,但却无法找到原版伴奏。为了解决这一难题,现在可以使用记灵在线工具来提取音频伴奏。本文…

瞬息全宇宙:苹果发布虚拟现实头显Vision Pro

WWDC23巅峰时刻 熬夜看了WWDC苹果发布会,传闻了N年的苹果MR(增强现实)产品,终于来了。 One More Thing,库克说出了这句话,巅峰时刻终于到来! 新的交互 名字叫Vision Pro,虽然这名…

《计算机网络——自顶向下方法》精炼——4.1-4.3.0

书读得越多而不假思索,你就会觉得你知道的很多;而当你读书而思考的越多的时候,你就会越清楚的看到,你知道的还很少——伏尔泰 文章目录 概述转发、路由选择网络服务模型 虚电路和数据报网络虚电路网络数据报网络 路由器工作原理 概…

chatgpt赋能python:Python如何出图

Python如何出图 作为一种广泛使用的编程语言,Python不仅仅可以用于数据分析、机器学习等领域,还可以用来生成图像。在这篇文章中,我们将介绍Python如何出图,并将重点放在与SEO相关的方面。 1. Python出图的基本原理 Python有多…

刷题记录:哈希 | leetcode-2352. 相等行列对 2023/6/6

2352. 相等行列对 这题还是非常简单的。如果用模拟的方法,时间复杂度要达到O(n^3)了,感觉不太可。 这回学聪明了,没有一上来就想着暴力模拟。用哈希的办法,可以把时间复杂度降为O(n^2)。 我的思路是先转置矩阵,再用…

Matlab论文插图绘制模板第99期—正负柱状图

在之前的文章中,分享了很多Matlab柱状图的绘制模板: 进一步,再来分享一种特殊的柱状图:正负柱状图。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下载…

HTML+JS 实现手机号码归属地查询功能

手机号码归属地 API 是一种提供号码归属地信息的接口,它通过与运营商和电信数据库交互,根据手机号码查询相关归属地信息并返回结果。通过使用手机号码归属地API,开发者可以轻松地集成号码归属地查询功能到他们的应用程序和服务中,…

简介- 谷粒商城项目微服务架构图

目录 项目前置知识一、前后端分离开发,分为 内网部署 和 外网部署。二、用户是通过使用 客户端 来完成各种的功能三、网关的作用四、Sentiel组件五、Feign组件六、OAuth2.0认证中心七、SpringSecurity组件八、关于数据存储的解决方案九、定位bug十、注册中心十一、配…

Java 进阶 -- Lambda 表达式

Lambda Expressions 匿名类(anonymous classes)的一个问题是,如果匿名类的实现非常简单,比如一个只包含一个方法的接口,那么匿名类的语法可能会显得笨拙和不清晰。在这些情况下,您通常试图将功能作为参数传…

Spark RDD计算总分与平均分

文章目录 一,提出任务二,实现思路三,准备工作1、启动HDFS服务2、启动Spark服务3、在本地创建成绩文件4、将成绩文件上传到HDFS 四,完成任务1、在Spark Shell里完成任务(1)读取成绩文件,生成RDD&…

从Java BIO到NIO再到多路复用,看这篇就够了

从一次优化说起 近期优化了一个老的网关系统,在dubbo调用接口rt1000ms时吞吐量提升了25倍,而线程数却由64改到8。其他的优化手段不做展开,比较有意思的是为什么线程数减少,吞吐量却可以大幅提升?这就得从IO模型说起&a…

消息队列kafka使用技巧和常见问题

目录 【消息队列概述】 【kafka】 消息丢失问题 消息重复问题 消费顺序问题 消息积压问题 kafka集群部署 【消息队列概述】 消息队列主要解决应用耦合、异步消息、流量削锋等问题,是大型分布式系统不可缺少的中间件。消息生产者 只管把消息发布到 MQ 中而不…

【CMake 入门与进阶(4)】 CMakeLists.txt 语法规则基础及部分常用指令-续(附使用代码)

由于篇幅问题本篇接着上文继续介绍 CMakeLists.txt 语法规则基础及常用指令。 aux_source_directory aux_source_directory 命令会查找目录中的所有源文件&#xff0c;其命令定义如下&#xff1a; aux_source_directory(<dir> <variable>)从指定的目录中查找所有…

开发者工具调试

Console控制台 F12打开控制台 选择其他tab面板时&#xff0c;ESC打开Console面板enter直接执行Console的代码&#xff0c;shiftEnter输入多行代码 Source面板 左键单机行号设置断点&#xff0c;或在代码中添加debugger;右键单机行号设置条件断点&#xff08;条件表达式为tr…

PowerShell install 一键部署mariadb10.11

mariadb MariaDB数据库管理系统是MySQL的一个分支&#xff0c;主要由开源社区在维护&#xff0c;采用GPL授权许可 MariaDB的目的是完全兼容MySQL&#xff0c;包括API和命令行&#xff0c;使之能轻松成为MySQL的代替品。在存储引擎方面&#xff0c;使用XtraDB来代替MySQL的Inno…