加载中 ...
首页 > 新闻资讯 > 小程序 正文

小程序传输事件消息和数据实现

2019-07-31 08:44:26 来源:沈阳小程序开发 作者:沈阳软件开发

由于微信小程序 wx.navigateBack方法不支持返回值,因此在返回页面后无法轻松实时更新页面。所以小程序跨页面传递事件消息和数据如何解决它。

21708-1PR1142501Q6.png

一.需求分析

这种类型的要求可能意味着:页面进入B页面,B页面返回并将值传递给A或当B页面触发事件时,页面也有事件触发器更改。

21708-1PR1142311958.png

商业分析

一般方法是:首先:使用微信的wx.setStorage来缓存小程序实例中的数据。从B页面返回A页面时,B页面首先缓存数据;然后在A页面的onshow方法中,调用wx.getStorage来读取缓存。但是,它为将来的维护带来了很多隐患。 (类似于全局变量方法)

第二:您也可以通过获取上一页面实例的方法来完成此操作。部分代码如下:

Var pages=getCurrentPages(); var currPage=pages [pages.length - 1]; //当前页面var prevPage=pages [pages.length - 2]; //上一页//直接调用上一页()方法的setData,将数据保存到上一页的prevPage.setData({mdata: 1})

这种方法的缺点是B页面可能有很多条目。这样做可能会导致页面实例获取错误。

二.方法介绍

(onfire.js下载地址https://github.com/hustcc/onfire.js)输入下面的主题onfire.js()onfire.js是一个非常简单的事件分发JavaScript库(只需0.9kb),简单实用。它可以应用于: 1.简单事件分发。 2.对于React,Vue.js,Angular中的组件的轻量级实现。 3.活动订阅和发布。

使用思路:(做所有的移动开发,类似于iOS通知和Android广播)aA页面首先订阅一个事件并定义处理方法;湾从B页面返回时发送消息; cA页面卸载时,取消订阅。

我的用法是:页面代码:

Var onfire=require('./utils/onfire.js'); var that; var eventObj=onfire.on('key',function(){//当消息传递时,做一些特定的事情}); Page({data: {},onLoad: function(options){//在页面加载时进行初始化。},onReady: function(){//在页面就绪时执行某些操作。},onUnload: function(e){onfire .UN( '钥匙'); onfire.un(是eventObj); //取出}})

我们可以直接在A页面上调用onfire.on方法来订阅名为key的消息。在上面的代码中,不传递附加到消息的参数。如果需要传递参数,可以直接向函数添加参数,例如:

Var eventObj=onfire.on('key',function(data){//执行操作})

请务必注意,您必须取消订阅onUnload中的消息(当页面关闭时)并取消绑定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方法。该方法利用二维数组来存储订阅的对象。

函数_fire_func(eventName,args){if(hasOwnKey(__ onfireEvents,eventName)){_ first(__ onfireEvents [eventName],function(key,item){item [0] .apply(item [2],args); //执行订阅时的方法if(item [1])delete __onfireEvents [eventName] [key]; //当类型只订阅一次时,用户在通知后被删除。});}}

fire send message方法的本质是调用_fire_func方法,按名称遍历订阅者,然后通知订阅者。

函数un(event){var eventName,key,r=false,type=typeof event; if(type===string_str){//如果有一个键值,删除数组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返回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;}

调用un方法,按名称(密钥)遍历订户,找到并删除它。

注意:由于按键,对象和方法卸载了卸载支持,因此需要先确定类型,然后根据相应的规则取消绑定。

HiShop小程序工具提供多种类型的商城/商店小程序制作,可视化编辑1秒,在线生成5个步骤。通过拖动和拼接模块布局小程序商城页面,你可以看到你得到的东西,你只需要艺术家来制作一个漂亮的商场。有关更多小程序商店,请参阅:小程序商店

< 汇海(www.hvihi.com)是国内知名的商城系统和商城网站建设提供商,其中汇海技术小程序系统提供小程序商城开发,小程序配送系统,微分配系统,商城系统,电子商务网站建设, 微信发行系统,小程序商城及其他多端商场和电子商务行业解决方案>

确认:这个文件和图像源网络编辑器的网站部分,如果有侵权及时通信删除。 汇海hvihi.com网站原创文章,请注明出处。

“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。