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

前情

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

为什么要这么做?

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

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

实现代码

A页面

jsx 复制代码
<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页面

jsx 复制代码
<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)

相关推荐
恋猫de小郭21 小时前
Android 宣布 Runtime 编译速度史诗级提升:在编译时间上优化了 18%
android·前端·flutter
莓莓儿~21 小时前
Next.js 14 App Router数据获取开发手册
开发语言·前端·javascript
文心快码BaiduComate21 小时前
AI Coding老跑偏?用Comate Rules功能,少走十年弯路!
前端·架构·前端框架
PineappleCoder21 小时前
WebP/AVIF 有多香?比 JPEG 小 30%,<picture>标签完美解决兼容性
前端·面试·性能优化
Kaze_story21 小时前
Vue第五章(1):scoped、组件通信
前端·javascript·vue.js
hayzone21 小时前
Git 配置与使用全攻略(含工作流对比与 AI 协作)
前端
匠心网络科技21 小时前
前端框架-Vue为何开发更高效?
前端·javascript·vue.js·前端框架
大风起兮云飞扬丶21 小时前
react大列表更新时优化
前端·react.js·前端框架
0思必得021 小时前
[Web自动化] HTML5常见新增标签
前端·python·自动化·html5·web自动化
Alair‎21 小时前
103React数据处理
开发语言·前端·javascript