在调用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 v1的原始答案.十、

@ngrx/store扩展了BehaviorSubject,并且它有一个可以使用的value属性.

this._store.value

这将是你的应用程序的当前状态,从那里你可以 Select 属性、过滤器、 map 等...

update:

我花了一段时间才弄清楚您示例中的内容(:要获得当前值dataForUpdate,您可以使用:

let x = this._store.value.StateReducer.dataForUpdate;
console.log(x); // => { key: "123" }

更新@ngrx/store v2.十、

随着版本2的更新,value被删除,如docs中所述:

用于同步从存储中提取最新状态值的API已被删除.相反,如果必须获取状态值,则始终可以依靠subscribe()同步运行:

function getState(store: Store<State>): State {
    let state: State;

    store.take(1).subscribe(s => state = s);

    return state;
}

Angular相关问答推荐

将Angular Metal的芯片组件集成到我的表单中时出错

使用多个管道时Angel 17空数据

在Angular 17中加载页面时打开打印对话框

try 测试具有Angular material 下拉列表的组件时,在Angular 17中发现&q;错误的意外合成属性@TransitionMessages

停靠的Angular 应用程序的Nginx反向代理无法加载assets资源

访问Angular 模板中的HTML元素属性

Rxjs重置执行后的可观察延迟并重新调度Angular

从Angular 前端访问ASP.NET Core 8 Web API时出现CORS错误

RXJS拆分返回值,多次调用后重新加入

Angular CLI 与 Angular 版本不兼容

如何检测 Angular Universal 预渲染版本?

Angular 迁移 14 到 15 / 16:angular universal 是否停止将 <!-- this page was prerendered with angular universal --> 用于预渲染页面?

Angular,数据显示在控制台但不在应用程序中

如何在 Angular 库中将依赖项声明为可选?

Angular 在关闭另一个对话框后打开另一个对话框的最佳做法是什么?

在 Angular 14 中找不到命名空间google

将 html ngModel 值传递给服务Angular

Angular2 路由 VS ui-router-ng2 VS ngrx 路由

ng-template 上的 *ngFor 不输出任何内容

Angular2:将数组转换为 Observable