首页 > 解决方案 > 如何计算状态属性?

问题描述

使用 NGXS,我的项目中有状态。我使用服务将一些数据加载到状态中。一切正常。但是,我还需要公开一个属性,该属性从状态的另一个属性中获取数据并对其进行转换。我想使用 .pipe 来确保转换后的数据与实际数据保持同步。我只是不知道把这个转换逻辑放在哪里。

标签: rxjsngxs

解决方案


您可以使用 a@Selector根据您的状态模型来投影派生属性,例如:

export interface MyStateModel {
  firstName: string;
  lastName: string;
}

@State<MyStateModel>()
export class MyState {

  // Selector to project derived 'fullName' property of the state.
  @Selector()
  static fullName(state: MyStateModel): string { 
     return state.firstName + ' ' + state.lastName;
  }

  // Load the data 
  @Action(LoadData)
  loadData({patchState}: StateContext<MyStateModel>) { 
     patchState({
       firstName: 'Joe',
       lastName: 'Bloggs',
     }
  }

}

然后在您的组件中直接使用该选择器:

@Select(MyState.fullName) fullName$: Observable<string>;

推荐阅读