есть функции redo и undo и соответствующие кнопки в интерфейсе. Я хочу сделать такую фичу - нажал, к примеру, на кнопку undo, и пока не отпустил - изменения постепенно отменяются. Написал директиву, которая запускает функцию loop с setTimeout и если кнопку отпустить, срабатывает @HostListener('mouseup') и таймер очищается, цикл прерывается. И вроде всё хорошо, но есть проблема. Если я, к примеру, отменил ВСЕ действия или, наоборот, вернул - соответствующие кнопки дизейблятся (см. шаблон). А значит, mouseup не отрабатывает, цикл продолжает работать бесконечно. Как можно обойти эту проблему? Можно как-то в директиве отловить изменение атрибута disabled, чтобы вырубить цикл?
Вместо setTimeout в rxjs есть timer(), на который можно подписаться и отписаться. Внутри подписки сделайте проверку буфера действий, и если он пустой, отпишитесь от таймера
Завтра попробую, спасибо! Надеялся, что можно обойтись без rxjs ))) Но ведь знал же, что всё равно им всё и кончится )))
Обсуждают сегодня