#angular #ngrx #ngrx-effects
#angular #ngrx #ngrx-эффекты
Вопрос:
Здравствуйте, у меня есть эффект, который после нажатия кнопки отправляет новое действие для создания чего-либо,
@Effect({dispatch: false})
createSomething$ = this._actions$.pipe(
ofType(
clientsActions.Create),
mergeMap((action) => this._service.add(action.payload)
.pipe(
tap(() => this._router.navigate(['somewhere'])),
catchError(error => of())
))
);
И это работает хорошо, эффект отправляет запрос и перенаправляет, но теперь я хотел бы добавить действие из другого класса, который находится в корневом модуле, однако, когда я пытаюсь сделать что-то подобное
@Effect({dispatch: false})
createSomething$ = this._actions$.pipe(
ofType(
clientsActions.Create),
mergeMap((action) => this._service.add(action.payload)
.pipe(.map(() => ({type: this.otherActions.doAction),
tap(() => this._router.navigate(['somewhere'])),
catchError(error => of())
))
);
Это не работает, и другие действия ничего не делают, даже не отображаются в инструментах разработки, и теперь я в замешательстве от того, что произошло. Я пробовал также concatMap и т.д.
Ответ №1:
Используйте карту слияния и возвращайте массив [{type:ActionType}]
@Effect({dispatch: false})
createSomething$ = this._actions$.ofType(clientsActions.Create)
.pipe(
mergeMap((action) => this._service.add(action.payload).pipe(
mergeMap(() => ([{type: this.otherActions.doAction}]),
tap(() => this._router.navigate(['somewhere'])),
catchError(error => of())
))
);