typescript - Ako zabrániť používateľovi odoslať formulár viackrát? v Angular
Teraz mám funkciu, kde používateľ môže vytvoriť nové údaje a uložiť ich, ak údaje už existujú, zobrazí sa modálne okno ako
Teraz po tom, ako používateľ klikne na tlačidlo uložiť, bude to odoslané a kým je požiadavka stále v stave čakajúceho spracovania alebo načítavania, existuje tendencia, že používateľ znovu klikne na tlačidlo a zobrazí sa upozornenie „Údaje už existujú, chcete pokračovať v ukladaní?“ čo nechcem.
Ako vidíte na snímke obrazovky nižšie, požiadavka je stále čakajúca a načítava sa, takže ak používateľ klikne znova, ten pop-up sa opäť zobrazí. Ako to vieme vyriešiť pomocou Angularu? Máte nejaký dobrý nápad, ktorý by mohol pomôcť? Ďakujem.
#Uložiť útržok údajov
listenToSaveEvent(): void {
this.saveSubject
.asObservable()
.pipe(
filter((v) => !!v),
debounceTime(1e3)
)
.subscribe(() => {
if (this.respondents.length === 1) {
return this.checkExistingData();
#KÓD, KTORÝ SKÚMA EXISTUJÚCE ÚDAJE
checkExistingData(): void {
const test = this.formService.checkExisting(this.form)
.subscribe(res => {
if (res ) {
const createExistingSub = this.confirmDialogService.open(
ERROR_MESSAGES."Data already exists wanna proceed on saving?"
)
.componentInstance
.confirmed
.subscribe((confirmed) => {
if (confirmed) {
return this.createDATA();
}
createExistingSub.unsubscribe();
});
} else {
return this.createDATA();
}
});
Odpoveď č. 1
Možno budete chcieť počas spracovania požiadavky deaktivovať tlačidlo a/alebo na ňom zobraziť načítavací indikátor. Takto používateľ uvidí, že sa stále spracováva, a už nebudete mať tento problém, čo je lepšie z pohľadu používateľskej skúsenosti.
Odpoveď č. 2
Pridajte nejakú vlajku, ktorá sa prepne pred a po nahraní
`listenToSaveEvent(): void {
if (this.isUploading) { return;} // do nothing while uploading
this.isUploading = true;
this.saveSubject
.asObservable()
.pipe(
filter((v) => !!v),
debounceTime(1e3),
finally(() => this.isUploading === false) // no matter if it's success or error
)
.subscribe(() => {
if (this.respondents.length === 1) {
return this.checkExistingData();`

