我有一個角度組件顯示列表中的項目。每個itemn都可以被選擇,並且所選項目的id將被存儲在狀態中。所以我的狀態對象看起來像這樣f.e:如何用當前狀態值分配一個動作?
{ items: Item[]; selected: string[] }
現在我叫DeleteSelectedAction
這個動作得到selected
作爲有效載荷。此操作將使用效果等調用某個WebAPI。
現在我發現了兩種方法可以做到這一點。
第一:從庫中選擇selected
並訂閱它,並用行動
store.select(fromItems.getSelected).subscribe(ids => {
this.selected = ids;
});
...
store.dispatch(new itemActions.DeleteSelectedAction(this.selected);
二傳值:沒有傳遞價值的行動,但實際上取selected
store.dispatch(new itemActions.DeleteSelectedAction());
// in effect
@Effect()
delete$: Observable<Action> = this.actions$
.ofType(fromItems.DELETE)
.withLatestFrom(this.store.select(fromItems.getSelected)
.switchMap([action, selected] => {
return this.service.delete(selected)
.map(new itemActions.DeleteSuccessAction())
.catch(err => Observable.of(new itemActions.DeleteFailAction(err));
});
我不喜歡第一種方式,因爲我需要使用訂閱並需要正確取消訂閱。第二種方法是可以的,但只有當動作有副作用時。 所以現在我正在尋找第三種方法。在我的腦海這種方式如下所示:
store.dispatchWithLatestFrom(
fromItems.getSelected,
(selected) => new itemActions.DeleteSelectedAction(selected));
我怎麼能得到類似的東西與rxjs運營商?