小程序不同页面之间通讯的解决方案
小程序做開發的時候難免需要不同頁面之間的通訊,比如首頁打開新的頁面搜索獲取結果返回到首頁,不同tab頁面之間的數據交互等等。于是做了以下總結
當前頁面打開新的頁面
打開新的頁面可以通過 navigator 組件來實現,通過url傳參來實現,例如
<navigator url="../search/search?id=123" open-type="redirect">搜索</navigator>復制代碼在新的頁面 onLoad 事件可以拿到傳過來的參數 options
onLoad: function(options) {console.log(options.id); }復制代碼新的頁面回傳數據到當前頁面
在當前頁面定義一個方法
searchRet(results) {console.log(results); }復制代碼在搜索頁面獲取到的結果,由于小程序頁面是通過棧來存儲的,所以可以通過 getCurrentPages() 獲取獲取當前頁面棧的實例,第一個元素為首頁,最后一個元素為當前頁面
let pages = getCurrentPages(); let homePage = pages[pages.length - 2]; if (homePage) {homePage.searchRet(results); }復制代碼生命周期和storage
通過 wx.setStorageSync() 方法可以在本地存儲數據,在 page 的 onShow 回調里獲取 storage 的值后做相應的處理,例如
// index.js wx.setStorageSync('refresh', true);// mycenter.js if (wx.getStorageSync('refresh')) {// 做更新操作wx.removeStorageSync('refresh'); }復制代碼storage 也可以用 globalData 來代替,原理一樣,這里不做展開,兩種辦法都可行,但是就是太笨了,場景復雜起來沒法搞 ?
事件監聽
個人感覺通過全局的事件監聽來處理是一個很好的方法,在 Page 頁面監聽事件,通過在另一個 Page 觸發相應的事件,就可以做對應的處理,實時高效,于是我封裝了一個可以聲明命名空間的事件監聽器 nsevent ,可以通過 npm 安裝到小程序(微信官方npm使用方法)
nsevent的用法也很簡單,只需要在監聽的頁面通過 nsevent.on() 來實現監聽,建議添加第三個參數命名空間,這樣可以在 onUnload 回調解綁相應的事件,舉個以下例子
// select.js const nsevent = require('nsevent'); Page({onLoad() {nsevent.on('add', (num) => {console.log(`select.js接收到add事件,參數為${num}`)}, 'select.js')},addnumber() {nsevent.emit('add', 1);},onUnload() {console.log('select.js移除add事件')nsevent.off('add', 'select.js');} });復制代碼emit方法不僅可以觸發普通的事件,也可以觸發指定命名空間的事件,比如 pageA 和 pageB,pageC 都監聽了 locationChange 事件,在 pageC 頁面想單獨觸發 pageA 的回調,可以這樣寫 ?
nsevent.emit('locationChange', { ns: ['pageA'] });復制代碼不知道這工具對大家有沒有用,如有有用請給個星星吧,或者有其他好的意見可以討論一下。
首發于個人博客地址:?www.kelen.cc/posts/5bf58…
總結
以上是生活随笔為你收集整理的小程序不同页面之间通讯的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [日常]总结2016年7月入职至2016
- 下一篇: Github上 Star 数相加超过 7