Как передать значение в Effect в Ngrx - Angular - PullRequest
0 голосов
/ 22 мая 2019

Я довольно новичок в NgRx. Я хочу передать значение Эффекту. Это значение является параметром для поиска в службе.

Файл эффектов TS

export class UsersEffects {
  searchParam: string;
  @Effect()
  users$ = this.actions$.pipe(
    ofType(ActionTypes.SEARCH_USERS),
    map(action => action.payload), //ERROR doesn't recognize payload
    switchMap((payload) =>
      this.githubSearch.getUsers(payload).pipe(
        map(res => new UserActions.GetUsersSuccess(res)),
        catchError(() => of({ type: '[Users API] Users Loaded Error' }))
      )
    )
  );

  constructor(
    private actions$: Actions,
    private githubSearch: GithubSearchService
  ) {}
}

Как видите, у меня есть метод с именем getParam(), который подписывается на BehavioralSubject, который содержит параметр поиска. Я не могу назвать этот метод getParam() внутри моего эффекта. Есть ли другой способ сделать это? или передать его прямо в Effect из другого файла .ts? Использую ли я полезную нагрузку?

Файл компонента TS

    onSearch(): void {    
     this.githubSearchService.setSearchParam(this.searchForm.value.searchParam);
            this.store.dispatch(new UsersActions.SearchUsers());
            this.searchForm.reset();
     }

Редуктор TS

 case ActionTypes.SEARCH_USERS:
      return action.payload;

Действия TS

    export class SearchUsers implements Action {
      readonly type = ActionTypes.SEARCH_USERS;
      constructor(public payload: string) {}
    }

1 Ответ

1 голос
/ 22 мая 2019

Для этого вам понадобится полезная нагрузка действия.

this.store.dispatch(new UsersActions.SearchUsers(searchParam));

Затем сопоставьте полезную нагрузку действия с вашим эффектом.

this.actions$.pipe(
    ofType<SearchUsers>(ActionTypes.SEARCH_USERS),
    map(action => action.payload),
    switchMap((payload) => ...)
...