我目前正在使用ngrx构建一个Angular2应用来管理状态。碰到一个奇怪的问题,如果我使用store.select([state])填充一个observable,一切似乎工作正常,但如果我使用store.let([getState])我似乎无法订阅Observable从那时起。
我有一个组件:
export class Component implements OnInit {
items: Observable<Item[]>;
currentCategory: Observable<Category> = null;
constructor(
private store: Store<State>
) {
this.currentCategory = store.select(s => s.categories.selected);
// this.currentCategory = store.let(storeRoot.getSelectedCategory);
this.items = store.select(s => s.items);
}
ngOnInit() {
this.currentCategory.subscribe(cat => {
this.Items = this.store.select(s => s.items.budgetItems)
.map(items => items.filter(item => item.category === cat.name ));
});
&#13;
想法是在类别名称更改时按类别名称过滤项目列表。当我直接使用store.select语句获取状态时,这很好用,但是当我尝试在商店中使用选择器时,Observable似乎被分配了一次,对它的任何更改都不再触发订阅块。
export interface AppState {
items: fromBudgetItem.State;
categories: fromCategory.State;
};
export const composeStore = compose(storeLogger(), combineReducers)({
items: fromBudgetItem.default,
categories: fromCategory.default
});
// Categories selectors
export function getCategoriesState(state: Observable<AppState>) {
return state.select(s => s.categories);
}
export const getSelectedCategory = compose(fromCategory.getSelectedCategory, getCategoriesState);
&#13;
&#39;撰写&#39; statement指的是reducer中的一个选择器:
export interface State {
selected: null
};
export function getSelectedCategory(state$: Observable<State>) {
return state$.select(state => state.selected);
}
&#13;
任何人都可以给出任何建议吗?这似乎是他们在ngrx example app中执行此操作的方式。