宏觀上,微信小程序是由一個個 Page 組成的。有時候我們會遇到一些業(yè)務存在耦合的 Page,一個 Page 里某個狀態(tài)改變后,相關 Page 的狀態(tài)需要進行更新。而在小程序里,每個 Page 都是一個模塊,有著獨立的作用域,因此 Page 間需要有一種通信策略。
想象一個業(yè)務場景,用戶首先進入訂單列表頁。然后點擊其中一個訂單,進入到訂單詳情頁。當用戶在訂單詳情頁對訂單進行操作,例如支付、確認收貨等時,該訂單的狀態(tài)就會發(fā)生改變。此時需要對上一級的訂單列表頁中該訂單的狀態(tài)進行更新:
要想更新訂單列表頁的視圖層,就需要調用該 Page 對象的 setData
方法。這里為大家列舉三種比較常用的方案:
設置標志位
最簡單的方法,在訂單詳情頁對訂單的操作成功回調中,把一些標志位設置為 true,并設置好參數(標志位和參數可以存在 localStorage 或掛在全局 App 對象下)。然后每次在訂單列表頁的>這種處理在業(yè)務邏輯比較簡單、頁面間的耦合度很小時還能湊合,一旦邏輯復雜起來,就需要寫很多冗余的代碼,并且維護成本會非常高。
流程圖:
利用頁面棧獲取 Page 對象
如果訂單詳情頁里能拿到訂單列表頁的 Page 對象,就能去調用它的 setData 方法。小程序提供了一個方法 getCurrentPages