在 Spartacus 2.0 版之前,實現狀態持久性的唯一方法是使用一種稱為 storageSync 的簡單的聲明性機制,它允許您提供屬性鍵以在存儲中持久化。 當您啟動您的應用程序時,這些持久化的鍵用于設置存儲中的初始狀態。 使用 Spartacus 2.0 或更高版本,您可以通過使用 StatePersistenceService,特別是它的 syncWithStorage 方法來保持店面應用程序的狀態。 它不像 storageSync 那樣簡單,但它使用上下文和專用的 onRead 回調提供了更多控制。
您可以將以下選項傳遞給 syncWithStorage 函數:key、state$、context$、storageType 和 onRead。
這些選項的工作方式如下:
(1) 鍵用于區分存儲中的一個特征和另一個特征。例如,要存儲活動的購物車 id,您可以使用購物車密鑰,而對于用戶會話數據,您可以使用會話密鑰。
(2) state$ 是一個可觀察的對象,每次您想將新值保存到持久存儲時,它都會發出一個值。例如,為了在每次活動購物車 id 更改時保留活動購物車 id,此 observable 會發出一個新值。
(3) context$ 是一個 observable,它描述了特定狀態的有效上下文。例如,活動購物車 ID 僅對一個 base site 有效。在不同的基礎站點上,您希望使用不同的購物車。在這種情況下,使用 context$,您將使用每次更改時發出基本站點的 observable。
storageType 指定使用的存儲類型。默認情況下,存儲類型為本地存儲,但您可以將其更改為會話存儲等。
onRead 是每次上下文更改時調用的回調。以購物車為例,每次更改基本站點時,都會使用從存儲中讀取的值調用該特定上下文的回調。如果存儲中沒有保存任何內容,它將調度 undefined 值。
運行時,該邏輯通過 APP_INITIALIZER 初始化:
返回的 result 是一個 function:
toPromise 最后會觸發 subscribe:
更多Jerry的原創文章,盡在:"汪子熙":