Angular CDK Layout - как удобный помощник при разработке адаптивных Angular приложений
В процессе разработки адаптивных UI многие разработчики сталкиваются с ситуациями, когда нужно понимать с каким размером окна в текущий момент работает ваш Angular SPA (Single Page Application) для того чтобы соответственно реагировать или изменять пользовательский интерфейс.
Angular Material CDK - предлагает пакет Layout который позволит вам получить текущую информацию о размере окна, а также подписываться на его изменения.
В состав пакета CDK Layout входят сервисы которые позволяют определить размер окна сопоставимо с медиа запросами в css.
Как использовать модуль CDK Layout :
Первым делом вы должны установить Angular Material CDK в ваше Angular приложение:
Затем импортируйте LayoutModule и добавьте его в imports вашего NgModule
Теперь вы можете использовать сервисы CDK Layout в ваших компонентах.
Подробно о функционале который предлагает модуль Layout :
1. BreakpointObserver
BreakpointObserver - это сервис в котором существует два метода observe и isMatched
BreakpointObserver.isMatched - является методом который возвращает boolean значение и в который нужно передать в виде аргумента медиа запрос или массив медиа запросов.
Пример использования в компоненте:
В темплейте:
В примере выше в компоненте - мы увидим в консоли надпись isMatched в том случае если при инициализации компонента при событии ngOnInit, любой из css медиа запросов в массиве будет удовлетворен.
Во втором примере в темплейте - мы увидим блок div только в том случае если ширина окна будет больше чем 900px.
BreakpointObserver.observe :
Метод observe возвращает observable типа BreakpointState на который мы можем подписаться и получать информацию об изменении размеров окна в соответствии с заданным медиа запросом или массивом медиа запросов.
В примере выше мы будем видеть в консоли сообщения если экран пользователя будет становиться больше или меньше 960px.
Хочу заметить что интерфейс BreakpointState выглядит следующим образом :
Из этого можно сделать вывод, что поле matches будет true - если хотя бы один из переданных медиа запросов будет удовлетворен. Соответственно если мы хотим получать информацию только по конкретному переданному медиа запросу - мы можем сделать так:
Дополнительно мы можем использовать объект Breakpoints, в котором уже есть фиксированные брейкпоинты в соответствии со спецификацией Google's Material Design
2. MediaMatcher
MediaMatcher - это сервис, который является оберткой над нативным методом JavaScript matchMedia. Его можно использовать так же как и BreakpointObserver.observe для наблюдения за изменением размера окна в зависимости от заданного медиа запроса.
Разница между BreakpointObserver.observe и MediaMatcher заключается в том что MediaMatcher предоставляет вам доступ к нативному JS объекту MatchQueryList, в некоторых случаях это может быть полезно.
Теперь, я надеюсь у вас есть полное понимание как пользоваться Angular CDK Layout для создания своих адаптивных Angular UI. =)