一个 JS 库就能解决小程序跨页传递事件消息和数据
由于微信小程序 wx.navigateBack 方法并不支持返回传值,导致页面在返回后,不能方便地即时更新数据。 一.需求分析此类需求大概意思是:A 页面进入 B 页面,B 页面返回并传值给 A或在B页面触发事件时,A页面也有事件触发改变。 业务分析 普遍方法为:? 第二种:获取前一个 page 实例的方法,也可以实现此功能。部分代码如下:
这种方法的弊端:因为进入 B 页面的入口可能是很多个。这样做,可能会导致获取到的页面实例不正确。 二.方法介绍(onfire.js的下载地址https://github.com/hustcc/onfire.js)? 使用思路:(做过移动端开发的都知道,类似于iOS的通知和安卓的广播)? 我的使用方法为:? that;
,function (){ });
Page({ }, // Do some initialize when page load. onReady// Do something when page ready. onUnloade{ eventObj);//移除 }) 我们可以在 A 页面直接调用 onfire.on 方法,订阅一个名字为 key 的消息。在上面的代码中,消息附带的参数无传参。? // 执行操作 需要注意的是,一定要在 onUnload 里(在页面被关闭时)取消订阅消息,并取消绑定 eventObj。
); 三.分析库代码if(typeof eventName !== string_str || callback function_str{ +string_str+','function_str''); (! hasOwnKey__onfireEvents eventName)){ }
} 从代码中可以看出订阅 on 方法的时候,实际调用 _bind 方法。该方法利用一个二维数组,来存储订阅的对象。 ])delete __onfireEvents][// 当类型为只订阅一次时,通知后即移除自己。 } 而 fire 发送消息方法的实质,是调用 _fire_func 方法,通过名字(key)来遍历订阅者,然后通知订阅者。 [];
} } eventName ]; //如果找到这个对象则卸载 ; //两层循环来判断方法名 _eachitem_1key_2 item_2 item_2 ]; }); r} } 调用un方法,通过名字(key)来遍历订阅者,找到后移除。 注:因为卸载支持按 key、对象、方法卸载,所以需要先判断类型,然后按各自规则去解除绑定。 作者:honey缘木鱼? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |