【发布时间】:2018-05-11 06:06:50
【问题描述】:
我阅读了 ngrx 商店的 documentation 关于选择器的内容,需要弄清楚如何创建选择器以便按项目 ID 选择一个项目。当我从selectAllItems 选择器中获取所有商品时,我已经可以将此作为商店订阅的一部分,但我需要弄清楚如何从商店中的商品列表中选择特定商品。我的主要原因是createSelector 提供了我喜欢从中受益的性能提升。
这是我的代码:
import { AppState, Item } from '../../shared/models/index';
import { createSelector } from '@ngrx/store';
export const selectItems = (state: AppState) => state.eventsState;
export const selectAllItems = createSelector(selectItems, (allItems: { items: Item[] }) => {
if (allItems && allItems.items) {
return allItems.items.filter((item: Item) => (!item.active && !item.closed));
} else {
return allItems.items;
}
});
然后在我的控制器中,我按 id 过滤以获取所需的项目:
this.store.select(selectors.selectAllItems)
.filter(data => data !== null)
.subscribe(allItems => {
this.item = allItems.filter(item => {
return item.id === this.navParams.data.id;
});
});
我希望能够为该特定项目创建一个选择器并像这样使用它:
this.store.select(selectors.selectItemById(this.navParams.data.id))
.filter(data => data !== null)
.subscribe(selectedItem => {
this.item = selectedItem;
});
任何帮助将不胜感激。
【问题讨论】:
标签: typescript ngrx ngrx-store