Я начал изучать управление состоянием с помощью NGXS. Пока все в порядке, но есть несколько вопросов относительно некоторых сценариев, таких как:
Если открыто диалоговое окно Mat (или любой div - здесь у меня есть оба сценария в моем проекте) и изнутри него вызывается API, как я могу закрыть диалоговое окно, только если API возвращает успех?
Предположим, пользователь вышел из системы, как я могу сбросить состояния до значений по умолчанию?
Для первого случая ниже мой код для состояния, действия и диспетчера:
abc.action.ts
export class AddExamCategory {
static readonly type = '[ExamCategory] Add';
constructor(public payload: ExamCategory) {}
}
abc.state.ts
export interface ExamCategoryStateModel {
examCategoryList: ExamCategory[];
}
@State<ExamCategoryStateModel>({
name: 'examCategory',
defaults: {
examCategoryList: []
}
})
@Injectable()
export class ExamCategoryState {
constructor(private _adminService: AdminService) {}
@Action(AddExamCategory)
addExamCategory({ getState, patchState }: StateContext<ExamCategoryStateModel>, { payload }: AddExamCategory) {
return this._adminService.createExamCategory(payload).pipe(tap(response => {
patchState({ examCategoryList: [] }); // Want to close the modal/div after this part. If API returns ERROR do not close.
}));
}
}
abc.component.ts
this.store.dispatch(new AddAdminUser({ ...this.adminRegistrationForm.value, password: this.password.value }))
.subscribe(response => {
this.store.dispatch(new GetAdminUsers());
this.dialogRef.close(true)
});
В настоящее время это так, но закрывается независимо от статуса API.
Для второго случая в сервисе, где я писал логику для logout()
, я написал так: this.store.reset({})
. Хотя он сбрасывает состояние, но не со значениями по умолчанию. У меня есть несколько состояний для сброса этого единственного метода выхода из системы.
Как работать с этими сценариями?