Ngrx Effects не слушает действия - PullRequest
0 голосов
/ 14 марта 2019

Я хочу использовать ngrx / efffects и ngrx / store в моем угловом приложении (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());
  }
}

1 Ответ

0 голосов
/ 14 марта 2019

Вам не хватает @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)))
      );
    })
  );
}

...