0
場景:Angular 2:使用.subscribe()時可避免雙重代碼?
- 用戶是一個頁面上,選擇他想要在他的購物車項目
- 項目是一旦用戶輸入他看到所有的購物車放入(全球)服務
- 他項目(其被加載到經由服務組件)
問題:
- 如果用戶重新加載購物車,所有物品都不見了
解決方案:
- 所有項目均通過持久性存儲保存,將被稱爲只有當用戶重新載入網站
過程: 爲了獲取站點重新加載後的項目,我正在訂閱一個服務,該服務從持久性存儲中收集所有項目。 當用戶進入購物車時(通過重新加載或通過應用程序內的直接導航),用於設置項目的代碼幾乎相同,因爲只有在網站重新加載後纔會觸發訂閱。
示例代碼:
ngOnInit() {
// We need the double code here because:
// 1. The normal code is for normal navigation of the user (e.g. from the home component to the shopping cart).
// The shopping cart is already filled with items
this.shoppingCart = this.shoppingcartService.shoppingCart;
// 2. The user reloads the site (or returns later after having it closed) and the shopping cart is filled (in the background)
// from the persistance store and emitted to all listeners of the application.
this.shoppingcartEmitter = this.shoppingcartService.shoppingCartEmitter.subscribe(shoppingcart => {
this.shoppingCart = shoppingcart;
});
}
這是一個簡化版本,但我們可以看到,我需要兩行相同的行爲。
問題:有沒有可能避免雙重代碼? 我的問題是,我需要使用shoppingcart中的項目,並且我將不得不編寫代碼來處理訂閱內部和外部的shoppingcart。
,使其堅持在車中的選擇項目[本地存儲或會話存儲(HTTPS爲什麼不改變服務:// WWW .w3schools.com/HTML/html5_webstorage.asp)?當服務初始化時,它會檢查存儲並加載項目(如果有的話)。然後,在頁面刷新的情況下,這些項目不會丟失。 – Igor
是會話存儲(在這種情況下)將解決我的問題。但是我想知道是否還有其他解決方案或最佳實踐可以在這裏添加 - 如果會話存儲不起作用。 – Saerdn
我只是總是訂閱發射器。如果不需要訪問商店,則可以返回一個新的observable,該observable使用'Observable.of'直接在服務中返回結果。 – Igor