前情

最近在做小程序项目,选用是当前比较火的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
// 处理事件的业务逻辑
// ...
}
},
onLoad(){
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)

uni-app上下级页面数据双向通信的更多相关文章

  1. 安卓开发app在后台运行时页面数据被系统清除后操作之重启APP

    在安卓开发过程中,当点击HOME键,将app运行在后台时,然后再点击app图标进入时,遇到了如下两种情况: 1.每次打开时,app的入口页面总是被执行. 2.当运行内存被其它应用占用完时,在进入app ...

  2. charles 抓包修改app页面数据

    1,首先给手机安装Charles证书,安装官方的来,在无线网配置项目,输入手动代理地址,后开启飞行模式刷新网络, 2,在浏览器输入chls.pro/ssl 下载并安装证书,此时电脑端charles 会 ...

  3. UWP开发:APP之间的数据交互(以微信为例)

    目录 说明 UWP应用唤醒方式 跟微信APP交互数据 APP之间交互数据的前提 说明 我们经常看到,在手机上不需要退到桌面,APP之间就可以相互切换,并且可以传递数据.比如我在使用知乎APP的时候,需 ...

  4. vue keep-alive 实现详情返回列表保留页面数据

    实现功能 详情页返回列表页,列表页保留上次浏览位置 其它页面进入到列表表,列表页刷新 当详情页有数据改变时,列表页也要更新该条数据 实现思路 用keep-alive保留列表页面数据 activated ...

  5. 第三方网站返回hybrid app H5页面缓存问题应对策略

    最近负责公司各产品线购买模块的开发,各项功能如期开发完成后测试那边反馈回来一个问题:IOS手机在点击支付宝购买后,跳转到支付宝网站时不输入支付密码,直接点返回,返回到我们自己的APP购买界面发现页面显 ...

  6. H5打开app指定页面(H5+app项目)

    H5+app项目,在HBuilderX中设置 详情参考官方 https://ask.dcloud.net.cn/article/64 给h5+app设置scheme值,作用:在其它app和h5页面中启 ...

  7. 如何利用`keep-alive`按需缓存页面数据

    随着项目不断变大,页面变多,搜索条件也随之也越来越多,而每次跳转页面再返回时,之前的筛选的条件都会别清空.之前在elment-ui table组件 -- 远程筛选排序提到过缓存,但是有所取巧,这次重新 ...

  8. uni app中使用自定义图标库

    项目中难免会用到自定义图标,那在uni app中应该怎么使用呢? 首先, 将图标目录放在static资源目录下: 在main.js中引入就可以全局使用了 import '@/static/icon-o ...

  9. vue基础之keep-alvie保持历史页面数据不变,切换页面后数据不变keep-alvie

    1:路由配置文件设置 { path: '/MenuM', component: Layout, redirect: '/MenuM', children: [ { path: 'MenuM', nam ...

  10. (Spring4 json入门)Spring4+SpringMVC+页面数据发送与接收(json格式)

    jar包(Maven仓库): Spring4 jar包(Maven仓库): 在测试过程中我查看了网上的一些教程,但是那些教程都是在Spring3环境下的,Spring3和Spring4解析json需要 ...

随机推荐

  1. chatGPT能做职业规划?看完之后发现3年软测白做了!

    "每天都是重复.单调的工作,收入不理想,想跳槽无力,学习又没有动力和方向,不知道未来的发展在哪里,甚至想转行·····" 做测试久了,很多人都有诸如此类的疑惑,不想一直停留在测试需 ...

  2. 音视频入门-8-ffmpeg小实验-v4l2 ubuntu取图、格式转换、编码成H264,ffplay观看

    1. getpic_transform_encode2h264.c #include <stdio.h> #include <string.h> #include <st ...

  3. USB gadget configfs

    概述 USB Linux Gadget是一种具有UDC (USB设备控制器)的设备,可以连接到USB主机,以扩展其附加功能,如串口或大容量存储能力. 一个gadget被它的主机视为一组配置,每个配置都 ...

  4. pytorch中y.data.norm()的含义

    import torch x = torch.randn(3, requires_grad=True) y = x*2 print(y.data.norm()) print(torch.sqrt(to ...

  5. CF753B题解

    这应该算是一个很脍炙人口的小游戏了吧 (没玩过算我没说) 因为一共有 \(50\) 次询问机会,那最简单直接的方法就不难想到. 我们把 \(0 \sim9\) 全部询问一遍,如果回答两个整数不全为 \ ...

  6. 2024csp初赛总结

    浙江27日下午1:30出分了,j组97,s组61.5,和估分一模一样,还好没有挂分.然后3点的时候上洛谷看了一下,全国分数线出了,j组89分,s组56分.那应该都过了,随后同学的成绩也出来了,sjx, ...

  7. Python之py9-录音自动下载

    #!/usr/bin/env python # -*- coding:utf-8 -*- import os import re import pandas as pd import numpy as ...

  8. JOI Open 2016

    T1 JOIRIS 你在玩俄罗斯方块,游戏区域是一个宽度为 \(n\),高度足够大的矩形网格.初始时第 \(i\) 列有 \(a_i\) 个方块. 给定参数 \(k\),你可以做不超过 \(10^4\ ...

  9. SQLSEVER 实现货币数字转中文汉字

    SQLSEVER 实现数字转换成中文(货币) -- ============================================= -- Author: LearnerPing -- Cr ...

  10. python多线程应用-批量下载拉勾网课程

    import concurrent import os import re import time from collections.abc import Iterable from Crypto.C ...