Angular 2与ngrx:使用选择器中断变化检测?

时间:2016-10-31 15:43:09

标签: javascript angular redux ngrx

我目前正在使用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;
&#13;
&#13;

想法是在类别名称更改时按类别名称过滤项目列表。当我直接使用store.select语句获取状态时,这很好用,但是当我尝试在商店中使用选择器时,Observable似乎被分配了一次,对它的任何更改都不再触发订阅块。

&#13;
&#13;
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;
&#13;
&#13;

&#39;撰写&#39; statement指的是reducer中的一个选择器:

&#13;
&#13;
export interface State {
    selected: null
};

export function getSelectedCategory(state$: Observable<State>) {
    return state$.select(state => state.selected);
}
&#13;
&#13;
&#13;

任何人都可以给出任何建议吗?这似乎是他们在ngrx example app中执行此操作的方式。

0 个答案:

没有答案