广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >微信小程序中如何实现多个页面传参通信
  • 458
分享到

微信小程序中如何实现多个页面传参通信

2024-04-02 19:04:59 458人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关微信小程序中如何实现多个页面传参通信的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言微信小程序越来越火,不少公司都在将原生代码转为微信小程序代码。在开

这篇文章给大家分享的是有关微信小程序中如何实现多个页面传参通信的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

前言

微信小程序越来越火,不少公司都在将原生代码转为微信小程序代码。在开发过程中,由于微信小程序wx.navigateBack方法并不支持返回传参,导致一些页面,尤其是从列表页面跳入详情页,用户在详情页改变了状态,返回后无论是否刷新页面,体验都不是很好。在Android中,我们一般采用setresult方法来返回参数,或者直接使用rxjava框架或者eventbus框架来解决此类问题。

业务分析

此类需求大概意思是:A页面进入B页面,B页面返回并传值给A。

探索之路

刚开始我想采用一个比较偷懒的方法,利用微信的wx.setStorage缓存在B页面存储,返回A页面,在onshow方法里调用wx.getStorage读取缓存来实现此功能。但是想想解决方式过于投机取巧,也会给日后维护带来大量隐患。
随后我在网上找到获取前一个page的方法,也可以实现此功能,部分代码如下:

var pages = getCurrentPages();
var currPage = pages[pages.length - 1]; //当前页面
var prevPage = pages[pages.length - 2]; //上一个页面

//直接调用上一个页面的setData()方法,把数据存到上一个页面中去
prevPage.setData({
 mdata:1 
})

仔细想了下,代码也不是很安全,因为进B页面的入口可能是多个,这样会导致获取的page出错。

本来是没招了,突然想到微信小程序支持js,然后就找了个轻量级的js库,而且是观察者模式,是我想要的类型。于是,好戏开始了

onfire.js介绍

onfire.js 是一个很简单的事件分发的javascript库(仅仅 0.9kb),简洁实用。

GitHub地址:https://github.com/hustcc/onfire.js [作者不是我]

本地下载地址:Http://xiazai.jb51.net/201705/yuanma/onfire.js(jb51.net).rar

可以用于:

  • 简单的事件分发;

  • React / vue.js / angular 用于跨组件的轻量级实现;

  • 事件订阅和发布;

实践

整理下思路如下:

  • A页面先订阅一个事件,并定义处理方法。

  • B页面返回时发送消息。

  • A页面卸载时,解除订阅。

A页面代码:

var onfire = require("../utils/onfire.js");
var that;
var eventObj = onfire.on('key', function () {
 //做具体的事
});

Page({
 data: {
 },
 onLoad: function(options) {
 // Do some initialize when page load.
 },
 onReady: function() {
 // Do something when page ready.
 },
 onUnload: function (e) {
 onfire.un('key');
 onfire.un(eventObj2);
 }
})

直接调用onfire.on方法订阅一个名字为key的消息,并且无传参。如果需要传参的话,直接在function里增加参数即可,如var eventObj = onfire.on('key', function (data)...

需要注意:一定要在onUnload里取消订阅key的消息,并取消绑定eventObj

B页面里代码在回调的地方加入

 onfire.fire('key');//key为上文中订阅的消息
 //有参数时
 onfire.fire('key','test');

分析库代码

 function _bind(eventName, callback, is_one, context) {
 if (typeof eventName !== string_str || typeof callback !== function_str) {
  throw new Error('args: '+string_str+', '+function_str+'');
 }
 if (! hasOwnKey(__onfireEvents, eventName)) {
  __onfireEvents[eventName] = {};
 }
 __onfireEvents[eventName][++__cnt] = [callback, is_one, context];

 return [eventName, __cnt];
 }

从代码中可以看出订阅on方法的时候实际调用_bind方法,该方法,主要是利用一个二维数组来存储订阅的对象。

 function _fire_func(eventName, args) {
 if (hasOwnKey(__onfireEvents, eventName)) {
  _each(__onfireEvents[eventName], function(key, item) {
  item[0].apply(item[2], args); //执行订阅时的方法
  if (item[1]) delete __onfireEvents[eventName][key]; // 当类型为只订阅一次时,通知后即移除自己。
  });
 }
 }

fire发送消息方法实质调用_fire_func方法,通过名字key来遍历订阅者,然后通知订阅者。

 function un(event) {
 var eventName, key, r = false, type = typeof event;
 if (type === string_str) {
  // 如果存在key值,则移除数组
  if (hasOwnKey(__onfireEvents, event)) {
  delete __onfireEvents[event];
  return true;
  }
  return false;
 }
 else if (type === 'object') {
  eventName = event[0];
  key = event[1];
  //如果找到这个对象则卸载
  if (hasOwnKey(__onfireEvents, eventName) && hasOwnKey(__onfireEvents[eventName], key)) {
  delete __onfireEvents[eventName][key];
  return true;
  }
  //否则返回false
  return false;
 }
 else if (type === function_str) {
  //两层循环来判断是否是方法名
  _each(__onfireEvents, function(key_1, item_1) {
  _each(item_1, function(key_2, item_2) {
   if (item_2[0] === event) {
   delete __onfireEvents[key_1][key_2];
   r = true;
   }
  });
  });
  return r;
 }
 return true;
 }

因为卸载支持按key、对象、方法卸载,所以需要先判断类型,然后按各自规则去解除绑定。

感谢各位的阅读!关于“微信小程序中如何实现多个页面传参通信”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 微信小程序中如何实现多个页面传参通信

本文链接: https://www.lsjlt.com/news/70448.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微信小程序中如何实现多个页面传参通信
    这篇文章给大家分享的是有关微信小程序中如何实现多个页面传参通信的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言微信小程序越来越火,不少公司都在将原生代码转为微信小程序代码。在开...
    99+
    2022-10-19
  • 微信小程序如何实现页面之间的传参
    这篇文章主要介绍了微信小程序如何实现页面之间的传参,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。微信小程序 传参:实现效果图:微信小程序在两...
    99+
    2022-10-19
  • 微信小程序页面如何传递参数
    微信小程序页面传递参数的示例:示例1:在对应的wxml文件中添加以下代码:<block wx:for="{{postList}}" wx:for-item="item"&nb...
    99+
    2022-10-20
  • 微信小程序item怎么页面传参
    微信小程序item页面传参的案例:A页面data-id="{{item.id}}"为标记列表的下标,item.id的来源与wx:for="{{ components }}"的列表渲染bindtap=&...
    99+
    2022-10-19
  • 微信小程序如何实现页面传值
    这篇文章将为大家详细讲解有关微信小程序如何实现页面传值,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微信小程序 页面传值详解一. 跨页面传值.1 . 用 navigato...
    99+
    2022-10-19
  • 微信小程序中怎么实现页面间跳转传参
    微信小程序中怎么实现页面间跳转传参,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。缓存虽然URL传参比较简单易用,但也有局限性,...
    99+
    2022-10-19
  • 微信小程序中如何实现页面跳转和参数传递
    这篇文章主要为大家展示了“微信小程序中如何实现页面跳转和参数传递”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序中如何实现页面跳转和参数传递”这篇文章吧...
    99+
    2022-10-19
  • 微信小程序如何向父页面传递参数
    在微信小程序中利用小程序盏队功能向父页面传递参数,实现代码如下:let pagetotal = getCurrentPages(),//获取盏队thispage = pagetotal[pagetotal.length - 1],//子页面...
    99+
    2022-10-04
  • 微信小程序如何实现页面间传值
    这篇文章主要介绍“微信小程序如何实现页面间传值”,在日常操作中,相信很多人在微信小程序如何实现页面间传值问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序如何实现页面间传值”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-14
  • 微信小程序怎么传参给当前页面
    微信小程序传参给当前页面的方法:用 navigator标签传值或 wx.navigator。<navigator class="hotCateColumn" url="../detai...
    99+
    2022-10-21
  • 微信小程序中如何实现子页面向父页面传值
    这篇文章主要介绍微信小程序中如何实现子页面向父页面传值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!微信小程序中子页面向父页面传值实例详解上面一张图是编辑款项页面,下面一张图是点击了...
    99+
    2022-10-19
  • 微信小程序如何实现动态传参
    这篇文章将为大家详细讲解有关微信小程序如何实现动态传参,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微信小程序 动态传参实例详解在微信小程序的开发过程中经常会用到动态传参...
    99+
    2022-10-19
  • 微信小程序实现页面导航与传参功能详解
    目录一、页面导航概述分类声明式导航导航到tabBar页面导航到非tabBar页面后退导航编程式导航导航到tabBar页面导航到非tabBar页面后退导航导航传参声明式导航传参编程式导...
    99+
    2022-11-13
    微信小程序页面导航 微信小程序传参
  • 微信小程序页面间如何传id
    微信小程序页面间传id的方法:在.wxml文件中添加以下代码<block wx:for-items="{{newGoods}}" wx:key="id"> &...
    99+
    2022-10-20
  • 微信小程序zm 实现页面跳转传值
    这篇文章给大家分享的是有关微信小程序zm 实现页面跳转传值的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。微信小程序实现页面跳转传值的方法比如从index。wxml跳转到aaa.w...
    99+
    2022-10-19
  • 微信小程序js如何向页面传值
    在微信小程序中利用js向页面传值的方法首先,在wxml页面中,自定义一个属性data-src;src='{{item.img}}' bindtap='biggerImg' data-src="{{需要传递的值}}"进入json文件,在文件调...
    99+
    2022-10-04
  • 微信小程序怎么实现页面跳转传值
    小编给大家分享一下微信小程序怎么实现页面跳转传值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!微信小程序 页面跳转传值实现代码微...
    99+
    2022-10-19
  • 微信小程序如何实现登录页面
    这篇文章主要讲解了“微信小程序如何实现登录页面”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序如何实现登录页面”吧!1. 在首页中加入一个弹窗作为登录窗口,效果如下图:(1)inde...
    99+
    2023-06-30
  • 微信小程序实现登录页面
    本文实例为大家分享了微信小程序实现登录页面的具体代码,供大家参考,具体内容如下 实现在进入微信小程序首页前的登录验证页面,这里有两种方法,但其实原理都是一样的。 1. 在首页中加入一...
    99+
    2022-11-13
  • 微信小程序中页面间如何实现传值与页面取值操作
    小编给大家分享一下微信小程序中页面间如何实现传值与页面取值操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:微信小程序...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作