詳解小程序不同頁面之間通訊的解決方案
小程序做開發(fā)的時候難免需要不同頁面之間的通訊,比如首頁打開新的頁面搜索獲取結(jié)果返回到首頁,不同tab頁面之間的數(shù)據(jù)交互等等。于是做了以下總結(jié)
當前頁面打開新的頁面
打開新的頁面可以通過 navigator 組件來實現(xiàn),通過url傳參來實現(xiàn),例如
<navigator url="../search/search?id=123" open-type="redirect">搜索</navigator>
在新的頁面 onLoad 事件可以拿到傳過來的參數(shù) options
onLoad: function(options) {
console.log(options.id);
}
新的頁面回傳數(shù)據(jù)到當前頁面
在當前頁面定義一個方法
searchRet(results) {
console.log(results);
}
在搜索頁面獲取到的結(jié)果,由于小程序頁面是通過棧來存儲的,所以可以通過 getCurrentPages() 獲取獲取當前頁面棧的實例,第一個元素為首頁,最后一個元素為當前頁面
let pages = getCurrentPages();
let homePage = pages[pages.length - 2];
if (homePage) {
homePage.searchRet(results);
}
生命周期和storage
通過 wx.setStorageSync() 方法可以在本地存儲數(shù)據(jù),在 page 的 onShow 回調(diào)里獲取 storage 的值后做相應(yīng)的處理,例如
// index.js
wx.setStorageSync('refresh', true);
// mycenter.js
if (wx.getStorageSync('refresh')) {
// 做更新操作
wx.removeStorageSync('refresh');
}
storage 也可以用 globalData 來代替,原理一樣,這里不做展開,兩種辦法都可行,但是就是太笨了,場景復(fù)雜起來沒法搞 😫
事件監(jiān)聽
個人感覺通過全局的事件監(jiān)聽來處理是一個很好的方法,在 Page 頁面監(jiān)聽事件,通過在另一個 Page 觸發(fā)相應(yīng)的事件,就可以做對應(yīng)的處理,實時高效,于是我封裝了一個可以聲明命名空間的事件監(jiān)聽器 nsevent ,可以通過 npm 安裝到小程序(微信官方npm使用方法)
nsevent的用法也很簡單,只需要在監(jiān)聽的頁面通過 nsevent.on() 來實現(xiàn)監(jiān)聽,建議添加第三個參數(shù)命名空間,這樣可以在 onUnload 回調(diào)解綁相應(yīng)的事件,舉個以下例子
// select.js
const nsevent = require('nsevent');
Page({
onLoad() {
nsevent.on('add', (num) => {
console.log(`select.js接收到add事件,參數(shù)為${num}`)
}, 'select.js')
},
addnumber() {
nsevent.emit('add', 1);
},
onUnload() {
console.log('select.js移除add事件')
nsevent.off('add', 'select.js');
}
});
emit方法不僅可以觸發(fā)普通的事件,也可以觸發(fā)指定命名空間的事件,比如 pageA 和 pageB,pageC 都監(jiān)聽了 locationChange 事件,在 pageC 頁面想單獨觸發(fā) pageA 的回調(diào),可以這樣寫 😀
nsevent.emit('locationChange', { ns: ['pageA'] });
附上小程序代碼片段,以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript實現(xiàn)網(wǎng)頁上的浮動廣告的簡單方法
JavaScript實現(xiàn)網(wǎng)頁上的浮動廣告的簡單方法,需要的朋友可以參考一下2013-06-06
JavaScript數(shù)組排序reverse()和sort()方法詳解
這篇文章主要介紹了JavaScript數(shù)組排序reverse()和sort()方法詳解,需要的朋友可以參考下2017-12-12
JavaScript Array實例方法flat的實現(xiàn)
flat() 方法用于將一個嵌套多層的數(shù)組進行扁平,返回新數(shù)組,它不會改變原始數(shù)組, flat 方法在處理多維數(shù)組時非常有用,它可以讓數(shù)組操作變得更加靈活和簡潔,本文給大家介紹了JavaScript Array實例方法flat的實現(xiàn),需要的朋友可以參考下2024-03-03
刷新頁面實現(xiàn)方式總結(jié)(HTML,ASP,JS)
多種方法實現(xiàn)頁面的刷新代碼2008-11-11

