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

【uniapp微信小程序】uniapp微信小程序——页面通信

uniapp微信小程序——页面通信

在开发微信小程序过程中,页面之间的通信是一个常见需求。在使用 uniapp 开发微信小程序时,我们可以采用多种方式实现页面之间的数据传递和状态共享。本文将详细介绍几种常见的实现方式,以供开发者参考。

1. 页面跳转携带参数

最常见的方法是在进行页面跳转时,通过调用 navigateTo, redirectToswitchTab 等 API 携带参数到新页面。

。例如:

// 当前页面的跳转
uni.navigateTo({url: 'detail?id=10003&name=wm',success: (res) => {// 跳转成功}
});

在目标页面的 onLoad 函数中接收这些参数:

// 目标页面的onLoad函数
onLoad: function(options) {console.log(options.id); // 输出 10003console.log(options.name); // 输出 wm
};

2. 全局事件通信

我们可以通过 uni.$emituni.$on 实现全局的消息订阅与发布,从而达到页面间通信的目的。

// 发送消息的页面
uni.$emit('update-status', { status: 'success' });
// 接收消息的页面
this.$on('update-status', (data) => {console.log(data.status); // 输出 success
});

3. 全局存储

利用微信小程序的全局存储功能,通过 uni.setStorageuni.getStorage 可以在不同页面之间共享数据。

// 存储数据
uni.setStorage({key: 'key',data: 'value',success: (res) => {// 数据存储成功}
});
// 获取数据
uni.getStorage({key: 'key',success: (res) => {console.log(res.data); // 输出 value}
});

4. 返回到上一页面并携带数据

在某些情况下,我们需要在用户操作之后返回上一页面并带回数据。这时可以通过 navigateBack 传递参数。

// 在当前页面,设置并返回上一页
var pages = getCurrentPages(); // 获取页面栈
var prevPage = pages[pages.length - 2]; // 上一个页面
prevPage.setData({myData: 'some data'
});
uni.navigateBack({delta: 1
});

在返回页面中,通过 onShow 或其他生命周期函数获取并使用这个数据。

// 在上一个页面
onShow: function() {console.log(this.data.myData); // 输出 some data
};

5. 使用 Vuex 状态管理

如果项目较大且状态管理复杂,可以使用 Vuex 来管理应用的全局状态,这样不仅能管理页面间的数据传递,还能更好地维护和更新数据。

// store.js
const store = new Vuex.Store({state: {myData: ''},mutations: {setMyData(state, payload) {state.myData = payload;}}
});// 页面A - 设置数据
this.$store.commit('setMyData', 'some data');// 页面B - 获取数据
console.log(this.$store.state.myData); // 输出 some data

6. 使用 Provide / Inject (仅在 vue3 中可用)

在 Vue 3 组合式 API 下,可以通过 provideinject 实现祖先组件与后代组件之间的数据共享。

// 父组件
import { provide } from 'vue';
provide('sharedData', 'some data');// 子组件
import { inject } from 'vue';
const sharedData = inject('sharedData');
console.log(sharedData); // 输出 some data

7. 自定义事件总线

在 uniapp 应用中创建一个专门用于管理页面之间事件通信的事件总线。这种方式在逻辑复杂、需要频繁通信的情况下非常实用。

// eventBus.js
import Vue from 'vue';
export const EventBus = new Vue();// 页面A 发送事件
import { EventBus } from './eventBus';
EventBus.$emit('my-event', 'some data');// 页面B 监听事件
import { EventBus } from './eventBus';
EventBus.$on('my-event', (data) => {console.log(data); // 输出 some data
});

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ChatGPT对话:Scratch编程中一个单词,如balloon,每个字母行为一致,如何优化编程
  • 第2章 大话 ASP.NET Core 入门
  • Python | Leetcode Python题解之第225题用队列实现栈
  • 【高中数学/指数、对数】已知9^m=10,a=10^m-11,b=8^m-9,则ab两数和0的大小关系是?(2022年全国统考高考真题)
  • 架构师机器学习操作 (MLOps) 指南
  • OR-152 IGBT光耦系列
  • wpf中ComboBox属性text 绑定变量后画面上不显示值
  • Github Action 自动部署更新静态网页服务
  • 华为机考真题 -- 密码解密
  • Spring的bean的生命周期——bean的创建与销毁
  • 灵岫科技技术二面\.(过了)
  • Go语言---文件分类、设备文件、磁盘文件、实现打开/写/读/关闭/拷贝文件
  • 20.js获取页面卷去的距离以及滚到到指定位置
  • LLaMA Pro:具有块扩展的渐进式 LLaMA[论文翻译]增量预训练 扩展transformer块
  • AI网络爬虫022:批量下载某个网页中的全部链接
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 给第三方使用接口的 URL 签名实现
  • 构造函数(constructor)与原型链(prototype)关系
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 面试遇到的一些题
  • 爬虫模拟登陆 SegmentFault
  • 前端之Sass/Scss实战笔记
  • 时间复杂度与空间复杂度分析
  • 再谈express与koa的对比
  • MPAndroidChart 教程:Y轴 YAxis
  • 如何在招聘中考核.NET架构师
  • #数学建模# 线性规划问题的Matlab求解
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (19)夹钳(用于送货)
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (备忘)Java Map 遍历
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (未解决)macOS matplotlib 中文是方框
  • (一)Docker基本介绍
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .mysql secret在哪_MYSQL基本操作(上)
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET周刊【7月第4期 2024-07-28】
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • /etc/shadow字段详解
  • @Conditional注解详解
  • [ NOI 2001 ] 食物链
  • []FET-430SIM508 研究日志 11.3.31
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [BZOJ] 3262: 陌上花开
  • [C和指针].(美)Kenneth.A.Reek(ED2000.COM)pdf
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [docker] Docker容器服务更新与发现之consul
  • [go 反射] 进阶