是否可以在动作中访问其他状态?
场景:我有两种状态:
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?
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)