Адаптивная навигация по материалам Angular

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

Использование Angular-cli

Пакет Angular Material npm содержит несколько схем. Эти схемы упрощают создание строительных блоков приложения Angular Material.

После установки пакета Angular Material с помощью этой команды npm:

npm install --save @angular/material @angular/cdk @angular/animations

или командой Angular-cli:

ng add @angular/material

Теперь вы можете использовать схемы материалов Angular для создания навигационного компонента с помощью этой команды:

ng generate @angular/material:nav navigation

который создает новый компонент под названием навигация с 4 файлами:

Подробнее о схемах Angular Material читайте здесь

Теперь, если мы добавим элемент app-navigation в наш файл app.component.html

и зайдите в наш браузер, мы должны увидеть это:

Отображение компонента навигации, который выглядит так:

Скрытие Sidenav

Теперь давайте сделаем его более отзывчивым, скрыв боковую навигацию на больших экранах. Для этого мы должны добавить этот ng-class к элементу mat-sidenav:

[ngClass]="{'hidden': !(isHandset$ | async)}"

И добавьте для свойства display значение hidden class в none в файле navigation.component.css.

.hidden : { 
           display : none;
}

Теперь, если бы мы вернулись в наш браузер, мы бы обнаружили, что боковая навигация скрыта на средних экранах и отображается только при нажатии на значок гамбургера на маленьком экране. Но давайте посмотрим, как это произошло.

isHandset $

Это точка останова (менее 600 пикселей), обеспечиваемая угловой компоновкой материала. Есть другие точки останова, такие как tablet, tabletPortrait, handsetPortrait и другие ..

Вы можете проверить все точки разрыва материала здесь.

По умолчанию он был определен как наблюдаемый в navigation.component.ts.

Итак, в нашем sidenav get скрывается, когда isHandset $ возвращает false (т.е. когда экран не менее 600px ).

Добавление контента

Теперь давайте добавим контент в наш элемент контента sidenav, добавив

<ng-content></ng-content>

в нашем элементе ‹mat-sidenav-content› вот так:

Теперь, когда мы добавляем элемент app-navigation в наш app.component.html, мы можем писать контент внутри него, и он будет отображаться в контенте sidenav:

Чтобы увидеть Hello world! в нашей основной области содержимого.