ngxs:在Action中访问其他状态

Rat*_*tan 5 ngxs

是否可以在动作中访问其他状态?

场景:我有两种状态:

  • FilterState
  • AppState

FilterState包含一个动作Filter,则在触发过滤器动作时filterService,将使用动作+的有效负载和中的值调用AppState

@Action(Filter)
filter(ctx, action) {
  // HOW TO GET VALUE FROM AppState

  return this.filterService.filter(action, valueFromOtherStore).pipe(
    tap(data => {
    // Do something with result
    })
  );
}
Run Code Online (Sandbox Code Playgroud)

如何从不同状态检索值以将此值应用于的第二个参数this.filterService.filter

Rat*_*tan 5

Shared State 文档回答了这个问题:

要访问其他状态selectSnapshot方法,store可以使用: this.store.selectSnapshot(PreferencesState.getSort)

@State<PreferencesStateModel>({
  name: 'preferences',
  defaults: {
    sort: [{ prop: 'name', dir: 'asc' }]
  }
})
export class PreferencesState {
  @Selector()
  static getSort(state: PreferencesStateModel) {
    return state.sort;
  }
}
?
@State<AnimalStateModel>({
  name: 'animals',
  defaults: [
    animals: []
  ]
})
export class AnimalState {
?
  constructor(private store: Store) {}
?
  @Action(GetAnimals)
  getAnimals(ctx: StateContext<AnimalStateModel>) {
    const state = ctx.getState();
?
    // select the snapshot state from preferences
    const sort = this.store.selectSnapshot(PreferencesState.getSort);
?
    // do sort magic here
    return state.sort(sort);
  }
?
}
Run Code Online (Sandbox Code Playgroud)