微信小程序6 - 页面之间传参及通知系统封装

1. 简单传参

wx.navigateTo({

url: '/pages/demo/index/index?

})

/pages/demo/index/index.js 中

onLoad(options){

var id = options.id; //获取通过url参数传递来的参数

}

2. 复杂传参

var json = JSON.stringify({a:1});

wx.navigateTo({

url: '/pages/demo/index/index?json='+ json

})

/pages/demo/index/index.js 中

onLoad(options){

var json = JSON.parse(options.json); //获取通过url参数传递来的参数 , 反解为json对象

}

3.

  1 写入storage

  2 写入app.globalData

  3 写入 其他自定义的全局容器内

以上123点都可以实现数据的传输.都是方式之一

4. 通知系统进行 数据传输

  对于大数据量的传输.这个过程可能会涉及到数据量,解析反解性能,或特殊字符等因素的干扰.

  以上1,2,3介绍的传输方式,只针对页面跳转前进有效,对于页面后退 如: 选择城市,选择日期等控件型页面,处理则要麻烦一些. 引入通知系统,则要方便许多

Notification 通知系统, 代码来自github做了一些扩展. 所谓的通知,也可叫 订阅-发布模式, 观察者模式 ....

即 有一个全局的通知模块,接收 订阅消息者,接收定向发布消息者.消息发送过来,会检查有没有订阅这个消息的人,有则主动推送消息给对方(具体为某个页面)

原始代码见:

github地址: https://github.com/icindy/WxNotificationCenter

我们封装并扩展了这个逻辑 , 编码

使用 self.addNotifyListener("订阅名称");       注册订阅者 -- 订阅页面调用

使用 self.onNotify(data消息传输的数据,"订阅名称")   处理消息   -- 订阅页面处理

使用  self.removeNotifyListener("订阅名称")      移除消息订阅 -- 订阅页面处理, 一般 不需要手工调用, 在 扩展Page参数一章中的处理,已经封装了消息的销毁逻辑

使用 self.postNotify("订阅名称",data消息传输的数据)  发布消息 -- 发布页面调用 (和订阅页面可以是同一个,一般都是最后打开的控件页面,比如 城市选择控件)

控件使用通知传递消息,可以见 pages/selectCity/index.js pages/datepicker/datepicker/index.js 引用页面, 主页->立即定制

封装后:

每个Page打开,都会注册一个 当前route.url 为名称的监听

Page Onload时,会首先判断有没有给自己的 消息,有则直接处理

Page OnUnload时,会销毁所有本页面的监听