По моему мнению, у веб-приложений есть недостаток, заключающийся в том, что они кажутся пользователю «фальшивыми» в том смысле, что при нажатии кнопки на самом деле не создается впечатление, что что-то происходит. Это происходит потому, что операция обычно выполняется асинхронно, и кнопку можно нажимать несколько раз, если не реализовано какое-либо наложение (что довольно уродливо).
Моя цель - разработать способ удержания кнопки как " нажимается "до тех пор, пока основная асинхронная операция 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()
Любая помощь приветствуется, спасибо.