#57 Делаем приложение интерактивным при помощи Angular и RxJs.

Aleksandr Shatilov
2 min readJan 23, 2021

--

Прокачай свое приложение. Разреши пользователю настраивать размеры отдельных частей интерфейса. Часто это используется в таких приложениях как gmail, figma, pgAdmin и других подобных продуктах. С помощью Angular и RxJs это можно сделать буквально в 15 строчек кода.

Angular rxjs material resizable

Записывайтесь на курсы школы ИТ лидеров https://growleader.ru

Идея создания

При создании этого компонента я смотрел идеи у Инкина Александра. В его примере можно редактировать ширину столбцов таблицы. Мне же потребовалось создать, то, что позволит мне изменять ширину и высоту, плюс покрыть это все тестами. И в конце мне захотелось иметь возможность использовать палитру из Angular Material в этом компоненте, чтобы не выбиваться из общего дизайна продукта.

Пост в твиттере Инкина Александра

Реализация

Первым шагом я создал новый проект, подключил angular material и добавил кастомную тему.

Интерактивным элементом компонента будет вертикальная или горизонтальная полоса. Доработаем директиву. С помощью оператора fromEvent из RxJs события этого элемента будут преобразованы в observable цепочку. Все начинается с события mousedown, после чего мы обрабатываем поток от mousemove до тех пор пока не произойдет mouseup. Mousemove возвращает новую ширину и высоту элемента и эти данные эмитится в Output.

Доработанная версия директивы resizable

Доработаем компонент. Теперь он принимает параметр от которого зависит отображение интерактивного элемента и изменения ширины или высоты. С помощью HostBinding будут устанавливаться стили ширины или высоты компонента хоста.

Добавим представление компонента. В зависимости от параметра позиционирования будет отображаться или горизонтальная полоса или вертикальная.

View компонента resizable

Добавим стили и тему из material. Тут содержатся базовые стили и миксин для применения цвета из палитры темы.

Стили и тема компонента

Добавим тесты. Для этого будем использовать стандартные Angular инструменты. Тест будет создавать компонент, у которого можно менять размеры. Для изменения размера нужно имитировать действия мыши, для этого можно воспользоваться браузер API MouseEvent. После нужно вызвать dispatchEvent у элемента и проверить, что размер элемента изменился.

Тест для resize компонента.

Посмотрим результат.

Демо resize

Материалы и ссылки

Исходники можно скачать тут .

Подписывайтесь на мой канал телеграм о фронтенде, ui и ux front_ui_ux.

Ставьте клапы и подписывайтесь, ведь это приятно и мотивирует на новые материалы!

Заключение

Записывайтесь на курсы школы ИТ лидеров https://growleader.ru

В конце я хотел бы пожелать вам не останавливаться на изучении react angular или vue. Смотрите на веб разработку шире:

  • следите за Browser API, он постоянно развивается и появляются новые классные вещи.
  • смотрите приемы RxJs на фронтенде, этот инструмент независимо от фреймворка сделает многие вещи удобнее.
  • изучайте инструменты тестирования и devtools. Они сделают ваш продукт качественней и производительней.

--

--