Как исключить повторное событие клика?

У меня имеется несколько компонентов в шаблоне которых привязано событие <div (click)="edit(obj)"></div>

Однотипный обработчик:

public edit(actdoc: any): void {
        this.applicationRelationShipsService
            .get(actdoc.actdocid)
            .pipe(
                indicate(this.loading$),
                observableTimestampResponse(),
                switchMap((actdoc) =>
                    this.dialog
                        .open(DialogAddExistingRelationshipDetailsComponent, {
                            ...this.dialogConfig,
                            height: '480px',
                            data: { appid: this.application.appid, mode: MODES.EDIT, actdoc },
                        })
                        .afterClosed()
                        .pipe(
                            filter(Boolean),
                            concatMap(() => this.applicationRelationShipsService.getByAppId(this.application.appid)),
                        ),
                ),
            )
            .subscribe((actdocs) => {
                this.actdocs = actdocs.slice();
                this.changeDetection.detectChanges();
            });
    }


Как исключить повторный клик и вызов this.applicationRelationShipsService.get. до тех пор пока откроется и затем закроется диалоговое окно. Или же не возникнет ошибка запроса.
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
event.pipe(
  exhaustMap(() => someFiniteAction)
)


По event запустится someFiniteAction, и пока он не завершится, любые следующие event будут игнорироваться. После завершения будет опять будет слушать.

А отписываться нужно всегда
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы