Ngrx Effects не слушает действия

Я хочу использовать ngrx / efffects и ngrx / store в моем приложении angular (v7). В моем приложении все настроено, как указано в документации ngrx. При отправке действия в AppComponent редуктор работает должным образом, но похоже, что эффекты не прослушивают никаких действий.

Тестирование:

Проверьте консоль, выполнив ng serve -o. Все регистрируется, как и ожидалось, кроме того, что находится в эффектах.

Подскажите, пожалуйста, в чем я ошибся.

Github Repo

Эффекты

@Injectable()
export class AppEffects {
  constructor(
    private actions$: Actions,
    private myService: MyserviceService
  ) {}

  myAction$ = this.actions$.pipe(
    ofType<fromActions.GetItems>(MyActionTypes.GET_ITEMS),
    switchMap(action => {
      console.log('i am in effects', action);
      return this.myService.getItems().pipe(
        map(data => new fromActions.GetItemsSuccess(data)),
        catchError(err => of(new fromActions.GetItemsSuccess(err)))
      );
    })
  );
}

Настроенные эффекты в AppModule

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    StoreModule.forRoot(reducers, { metaReducers }),
    EffectsModule.forRoot([AppEffects])
  ],
})

Действие диспетчеризации в AppComponent

export class AppComponent implements OnInit {
  constructor(private store: Store<State>) {
    console.log('in component');
  }

  ngOnInit() {
    console.log('dispatched action in AppComponent');
    this.store.dispatch(new fromAction.GetItems());
  }
}

person Raj    schedule 14.03.2019    source источник
comment
Пожалуйста, разместите несколько соответствующих разделов кода в вопросе   -  person PSL    schedule 14.03.2019


Ответы (1)


Вам не хватает декоратора @Effect(), без которого эти наблюдаемые объекты не будут зарегистрированы как побочные эффекты магазина.

import { Effect, Actions, ofType } from '@ngrx/effects';

//....

@Injectable()
export class AppEffects {
 //  ....

  @Effect()
  myAction$ = this.actions$.pipe(
    ofType<fromActions.GetItems>(MyActionTypes.GET_ITEMS),
    switchMap(action => {
      console.log('i am in effects', action);
      return this.myService.getItems().pipe(
        map(data => new fromActions.GetItemsSuccess(data)),
        catchError(err => of(new fromActions.GetItemsSuccess(err)))
      );
    })
  );
}

person PSL    schedule 14.03.2019
comment
Можете ли вы предположить, есть ли какая-либо лучшая практика для организации угловой структуры проекта? - person Raj; 14.03.2019