Как подписаться на конкретный объект в магазине angular2

Я реализую хранилище ngrx в своем приложении angular2,

Редуктор магазина выглядит так, как показано ниже, с двумя объектами:

export function loadSuccessNamesAction(state: StoreData, action: loadSuccessNamesAction): StoreData {
    const namesDataState = Object.assign({}, state);
   namesDataState .isSpinner = false;
   namesDataState .names = action.payload.names;
   return namesDataState ;
}

export function loadSuccessSubjectAction(state: StoreData, action: loadSuccessSubjectAction): StoreData {
    const subjectDataState = Object.assign({}, state);
   subjectDataState .isSpinner = false;
   subjectDataState .subject = action.payload.subject;
   return namesDataState ;
}

В моем компоненте я хочу получить только nameDataState, так как я могу подписаться только на один объект в магазине.

В настоящее время я подписываюсь на весь магазин, вместо этого я хочу подписаться только на первый объект.

Любые решения будут полезны, спасибо.


person Siva Kumar S    schedule 07.11.2017    source источник


Ответы (1)


Взгляните на distinctUntilKeyChanged.

this.store.select('namesDataState')
  //Only emit when any name has changed
  .distinctUntilKeyChanged(
    //Key to filter on
    'name',
    //Optional comparison function if you have a specific way of comparing keys 
    (x, y) => x.name === y.name)
  .pluck('name')
  .subscribe((name: any) => {});
person Shyam    schedule 09.06.2018