Мой класс сервиса перед вызовом веб-службы должен получить свойство (в моем примере: dataForUpdate) из моего состояния. В настоящее время я делаю это так:
constructor ( public _store: Store<AppState>,
public _APIService:APIService) {
const store$ = this._store.select ('StateReducer');
.../...
let update = this.actions$.filter ( action => action.type==UPDATE )
.do( (action) => this._store.dispatch({type: REDUCER_UPDATING, payload : action.payload }) )
*** GET STATE ***==> .mergeMap ( action => store$.map ( (state : AppState)=> state.dataForUpdate ).distinctUntilChanged(),
(action, dataForUpdate) {
return { type:action.type, payload : {employee:action.payload, dataForUpdate :dataForUpdate } };
})
* AND CALL API *==> .mergeMap ( action =>this._APIService.updateEmployee(action.payload.employee, action.payload.dataForUpdate),
(action, APIResult) => { return { type:REDUCER_UPDATED }})
.share ();
.../...
let all = Observable.merge (update, ....);
all.subscribe ((action:Action) => this._store.dispatch (action));
}
PS: Я использую angular2 -store-example (https://github.com/ngrx/angular2-store-example/blob/master/src/app/users/models/users.ts) в качестве руководства, чтобы следовать;)
Мне интересно, существует ли лучший (более чистый) способ? Может быть, мой переход к "функциональному программированию" еще не завершен...;)
Пример в реальном времени: https://plnkr.co/edit/WRPfMzPolQsYNGzBUS1g?p=preview