2017-03-10 9 views
2

我有一個使用ngrx存儲和效果的Angular2應用程序。一切都很好,但我不確定當服務調用操作成功完成時,處理知道的最佳方式,以便使用成功警報或類似方法更新視圖。如何使用ngrx監聽成功操作

例如,這是我在CreateUser視圖中的流程。

  1. 查看調度作用以實現
  2. 影響呼叫服務,創造用戶
  3. 服務返回的成功結果的影響(在我們的情況下更新的用戶對象)通過
  4. 影響通過一個新的狀態更新商店減速機。

現在我想向用戶表示操作已成功完成,但我不知道處理該問題的最佳方法。

我是否在CreateUser組件上設置了Store的Observable,以通過選擇器檢測更改,還是有更合適的方法?

回答

3

有幾乎是無止境的方法可以做到這一點,這裏是如何通過NGRX店和效果做一個這樣的例子:

  1. ...
  2. ...
  3. 服務回報成功結果到效果(在我們的例子中更新的用戶對象)
  4. 效果發出UPDATE_USER_SUCCESS_ACTION。與成功,一起行動的效果發出另一個動作 RESET_UPDATE_EVENT_ACTION(或者你可以設置爲 一個單獨的效果這一點,如果你喜歡)

的減速處理這些操作方式如下:

UPDATE_USER_SUCCESS_ACTION:

  • 更新當然用戶對象
  • 在商店設置一個標誌:userWasUpdated: true

RESET_UPDATE_EVENT_ACTION:

  • 設置在商店的標誌:userWasUpdated: false

而在你的組件,你執行以下操作:

userWasUpdated$ = this.store$ 
    .select(state => state.userWasUpdated) // this will only trigger when the value changed, because ngrxStore.select has a built-in distinctUntilChanged() 
    .filter(wasUpdated => wasUpdated) // we are only in "truthy" events, so we filter out the other events 

而且隨着userWasUpdated$你現在有一個Observable,只要userObject成功更新就會發出。


聽起來像很多代碼?是的,是的。只要有可能,我的個人解決方案是創建一些通知服務,顯示吐司/警報,我直接從效果中調用它。

+0

感謝您的確認。這與我最終做的非常相似。我也實現了一個toast服務,在效果上,我使用「showToast」分派一個Message對象,這樣我就可以控制何時顯示或者視圖自身處理所有事情。 –