Сделайте что-нибудь, когда действие было отправлено

Допустим, у нас есть действие SyncUserData, которое возвращает наблюдаемый объект, который прослушивает изменения из базы данных. При каждом изменении действие отправляет действие new PatchUserData(newData).

Действие SyncUserData отправляется (только один раз) из ngxsOnInit состояния.

В другом разделе (например, в компоненте) я хочу что-то делать всякий раз, когда действие PatchUserData отправляется. Что-то вроде этого:

this.store.onDispatch(PatchUserData).subscribe();

Я немного искал в исходниках и не нашел ничего похожего на мой пример.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
5
0
1 947
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В вашем случае вам не нужно подписываться на определенное событие, вы можете подписаться на userData в своем магазине и иметь самую последнюю его версию, независимо от того, какое действие его изменило. Измените следующий образец в соответствии с вашими моделями данных и подпишитесь на наблюдаемый:

import { Select } from '@ngxs/store';

@Select(({ userData }: AppState) => userData)
  userData$!: Observable<UserData>;

Подробнее о выборе: https://ngxs.gitbook.io/ngxs/concepts/select

@Select({ userData }: AppState) => userData) равно @Select(state => state.app.userData)?

Eliya Cohen 23.09.2018 10:49

Нет, равно @Select(state => state.userData)

Yevgen 23.09.2018 10:51

Хорошо, спасибо, но если да, то почему бы вам вместо этого не набрать @Select(state => state.userData)?

Eliya Cohen 23.09.2018 10:54

Используйте то, что вам больше подходит, мне просто нравится этот стиль

Yevgen 23.09.2018 10:58
Ответ принят как подходящий

Альтернативой подписке на состояние напрямую является использование потока действий NGXS, чтобы получать уведомления, когда определенное действие было отправлено / завершено, см. Документацию для обработчики действий.

Из официального документа:

@Component({ ... })
export class CartComponent {
  constructor(private actions$: Actions) {}

  ngOnInit() {
    this.actions$.pipe(ofActionSuccessful(CartDelete)).subscribe(() => alert('Item deleted'));
  }
}

Ты прав. Я использовал этот подход после того, как разместил этот вопрос. Так удобнее показалось.

Eliya Cohen 04.10.2018 10:05

Да, я тоже этим довольно часто пользовался - особенно если я хочу что-то сделать, но не очень заботится о том, чтобы смотреть на текущее состояние

Garth Mason 04.10.2018 10:09

@EliyaCohen это похоже на ответ на вопрос

angularrocks.com 06.04.2019 00:03

как мы можем использовать его для проверки выполнения одного действия из нескольких?

Ajantha Bandara 19.05.2020 08:00

Другие вопросы по теме