Удержание состояния кнопки до разрешения обещания в Angular 9 - PullRequest
0 голосов
/ 15 апреля 2020

По моему мнению, у веб-приложений есть недостаток, заключающийся в том, что они кажутся пользователю «фальшивыми» в том смысле, что при нажатии кнопки на самом деле не создается впечатление, что что-то происходит. Это происходит потому, что операция обычно выполняется асинхронно, и кнопку можно нажимать несколько раз, если не реализовано какое-либо наложение (что довольно уродливо).

Моя цель - разработать способ удержания кнопки как " нажимается "до тех пор, пока основная асинхронная операция c не будет решена (или отклонена), в основном компонент кнопки ожидает, пока операция не завершится. Это также то, что происходит в обычных настольных приложениях большую часть времени.

Идея состоит в том, чтобы реализовать ее как директиву или нечто, перехватывающее событие click() (или пользовательское, такое как onClick()), и если вызываемый метод возвращает обещание, то дождитесь разрешения обещания, чтобы снова использовать кнопку.

<button (click)="hello()">Hello</button>
async hello(): Promise<void> {
  // Do stuff...

  return Promise.resolve();
}

Чтобы прояснить идею, это обычно происходит:

User action:             hover    click     release
Button state:    normal  :hover   :active   normal
Triggers:                         hello()                resolve()

И к чему я стремлюсь:

User action:             hover    click     release
Button state:    normal  :hover   :active             -> normal
Triggers:                         hello()                resolve()

Любая помощь приветствуется, спасибо.

...