您好,登錄后才能下訂單哦!
小程序做開發的時候難免需要不同頁面之間的通訊,比如首頁打開新的頁面搜索獲取結果返回到首頁,不同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'] });
附上小程序代碼片段,以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。