私のサービスクラスは、Webサービスを呼び出す前に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));
}
次のガイドとして、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
@ngrx/store
BehaviorSubjectを拡張し、value
使用できるプロパティがあります。
this._store.value
それがアプリの現在の状態になり、そこからプロパティ、フィルター、マップなどを選択できます...
更新:
あなたの例で何が何であるかを理解するのにしばらくかかりました(:の現在の値を取得するにはdataForUpdate
、次を使用できます:
let x = this._store.value.StateReducer.dataForUpdate;
console.log(x); // => { key: "123" }
バージョン2への更新により、ドキュメントでvalue
説明されているように削除されました:
最新の状態値をストアから同期的にプルするためのAPIは削除されました。代わりに、
subscribe()
状態値を取得する必要がある場合は、常に同期実行に依存できます。
function getState(store: Store<State>): State {
let state: State;
store.take(1).subscribe(s => state = s);
return state;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加