Допустим, у нас есть действие SyncUserData
, которое возвращает наблюдаемый объект, который прослушивает изменения из базы данных. При каждом изменении действие отправляет действие new PatchUserData(newData)
.
Действие SyncUserData
отправляется (только один раз) из ngxsOnInit
состояния.
В другом разделе (например, в компоненте) я хочу что-то делать всякий раз, когда действие PatchUserData
отправляется. Что-то вроде этого:
this.store.onDispatch(PatchUserData).subscribe();
Я немного искал в исходниках и не нашел ничего похожего на мой пример.
В вашем случае вам не нужно подписываться на определенное событие, вы можете подписаться на userData
в своем магазине и иметь самую последнюю его версию, независимо от того, какое действие его изменило. Измените следующий образец в соответствии с вашими моделями данных и подпишитесь на наблюдаемый:
import { Select } from '@ngxs/store';
@Select(({ userData }: AppState) => userData)
userData$!: Observable<UserData>;
Подробнее о выборе: https://ngxs.gitbook.io/ngxs/concepts/select
Нет, равно @Select(state => state.userData)
Хорошо, спасибо, но если да, то почему бы вам вместо этого не набрать @Select(state => state.userData)
?
Используйте то, что вам больше подходит, мне просто нравится этот стиль
Альтернативой подписке на состояние напрямую является использование потока действий NGXS, чтобы получать уведомления, когда определенное действие было отправлено / завершено, см. Документацию для обработчики действий.
Из официального документа:
@Component({ ... })
export class CartComponent {
constructor(private actions$: Actions) {}
ngOnInit() {
this.actions$.pipe(ofActionSuccessful(CartDelete)).subscribe(() => alert('Item deleted'));
}
}
Ты прав. Я использовал этот подход после того, как разместил этот вопрос. Так удобнее показалось.
Да, я тоже этим довольно часто пользовался - особенно если я хочу что-то сделать, но не очень заботится о том, чтобы смотреть на текущее состояние
@EliyaCohen это похоже на ответ на вопрос
как мы можем использовать его для проверки выполнения одного действия из нескольких?
@Select({ userData }: AppState) => userData)
равно@Select(state => state.app.userData)
?