仅订阅 ngrx 商店的一部分
Subscribing to part of an ngrx Store only
在我的 Ionic/Angular 应用程序中获取组件以订阅 @ngrx 商店的 part 时遇到了很多麻烦。
在我的应用程序中,我有一个 index.ts 文件,其中包含:
import * as fromReducer1 from './reducer1';
import * as fromReducer2 from './reducer2';
export interface ApplicationState {
reducer1: fromReducer1.Reducer1State;
reducer2: fromReducer2.Reducer2State;
}
在 reducer1 中我有:
export interface Reducer1State {
products {
items: any[],
prices: any[]
},
filters: any[]
}
和导出函数
export function Reducer1 etc
在我的组件中,我可以通过这样做愉快地订阅 Reducer 1:
this.store.select('Reducer1')
.subscribe((store: any) => {})
这工作正常,但我想做的是让我的组件订阅 Reducer1,但 ONLY 获取对 Products 对象的更改,即如果过滤器对象发生更改,那么我不会对它感兴趣。或者至少当组件订阅时,它可以检测产品对象是否与上次相同,即使用 DistinctUntilChanged
(虽然我无法让它工作)
我该怎么做(我已经搜索并尝试了几件事,但都没有成功)。谢谢!
你可以写内部选择器
// take the whole state reducer
export const reducer2State= (state: State) => state.transactions;
//take inner reducer
export const getInnerState = createSelector(reducer2State,
fromReducer2.something);
// select in component
this.innerReducer = this.store.select(fromRoot.getInnerState );
如果您使用的是 ngrx2,请查看此 example app。
如果您使用的是 ngrx4,请查看此 example app
在我的 Ionic/Angular 应用程序中获取组件以订阅 @ngrx 商店的 part 时遇到了很多麻烦。
在我的应用程序中,我有一个 index.ts 文件,其中包含:
import * as fromReducer1 from './reducer1';
import * as fromReducer2 from './reducer2';
export interface ApplicationState {
reducer1: fromReducer1.Reducer1State;
reducer2: fromReducer2.Reducer2State;
}
在 reducer1 中我有:
export interface Reducer1State {
products {
items: any[],
prices: any[]
},
filters: any[]
}
和导出函数
export function Reducer1 etc
在我的组件中,我可以通过这样做愉快地订阅 Reducer 1:
this.store.select('Reducer1')
.subscribe((store: any) => {})
这工作正常,但我想做的是让我的组件订阅 Reducer1,但 ONLY 获取对 Products 对象的更改,即如果过滤器对象发生更改,那么我不会对它感兴趣。或者至少当组件订阅时,它可以检测产品对象是否与上次相同,即使用 DistinctUntilChanged
(虽然我无法让它工作)
我该怎么做(我已经搜索并尝试了几件事,但都没有成功)。谢谢!
你可以写内部选择器
// take the whole state reducer
export const reducer2State= (state: State) => state.transactions;
//take inner reducer
export const getInnerState = createSelector(reducer2State,
fromReducer2.something);
// select in component
this.innerReducer = this.store.select(fromRoot.getInnerState );
如果您使用的是 ngrx2,请查看此 example app。 如果您使用的是 ngrx4,请查看此 example app