小程序做開發的時候難免需要不同頁面之間的通訊,比如首頁打開新的頁面搜索獲取結果返回到首頁,不同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.jswx.setStorageSync('refresh', true);// mycenter.jsif (wx.getStorageSync('refresh')) { // 做更新操作 wx.removeStorageSync('refresh');}
storage 也可以用 globalData 來代替,原理一樣,這里不做展開,兩種辦法都可行,但是就是太笨了,場景復雜起來沒法搞
新聞熱點
疑難解答