В Angular 2 пока нет основных библиотек шаблонов пользовательского интерфейса, готовых для plug and play. Angular 2 Material Design находится в альфа-версии. Библиотека Bootstrap для Angular 2 также находится в разработке на Github, но не готова к использованию в прайм-тайм. Это означает, что создание пользовательского интерфейса для наших проектов Angular 2 в значительной степени предоставлено нашим собственным устройствам.
Давайте посмотрим, как запустить наш проект Angular 2 с помощью Bootstrap, но только с помощью таблиц стилей - без bootstrap.js или jQuery. Мы будем использовать Bootstrap 3, текущий стабильный выпуск, а не Bootstrap 4, на который нацелен проект
Angular 2 Bootstrap.
В этой статье мы создадим панель навигации Bootstrap как компонент Angular 2 и включим ее функцию переключения мобильного представления через класс компонента.
Мы пойдем по пути наименьшего сопротивления и просто заставим меню показывать и скрывать. В этом уроке мы откажемся от анимации перехода.
Для начала создайте NavbarComponent. Я поместил свой в CoreModule моего приложения Angular 2. Чтобы узнать больше об используемой мной модульной архитектуре, прочтите эту статью.
Начнем с голой панели навигации Bootstrap. Классы .collapse css еще не добавлены в html.
<!-- core/navbar.component.html --> <nav class="navbar navbar-inverse navbar-fixed-top"> <div class="container-fluid"> <div class="navbar-header"> <a class="navbar-brand">Project Manager</a> </div> <ul class="nav navbar-nav"> <li><a>Link 1</a></li> <li><a>Link 2</a></li> </ul> </div> </nav>
Файл TypeScript содержит следующее.
// core/navbar.component.ts import { Component } from '@angular/core'; @Component({ selector: 'ct-navbar', templateUrl: 'app/core/navbar.component.html' }) export class NavbarComponent { }
Добавьте панель навигации в шаблон AppComponent.
<!-- /app.component.html --> <!-- navbar --> <ct-navbar></ct-navbar> <!-- feature content --> <ct-project-center></ct-project-center>
Запустите приложение, и панель навигации отобразит следующее.
Обратите внимание, что bootstrap.css обрабатывает отображение мобильной панели навигации для нас с помощью медиа-запроса - @media(min-width: 768px){...}
Чтобы наша навигационная панель свернулась, мы добавляем еще немного разметки в наш шаблон, используя Документацию Bootstrap в качестве руководства.
<nav class="navbar navbar-inverse navbar-fixed-top"> <div class="container-fluid"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <!-- #1 --> <a class="navbar-brand">Project Manager</a> </div> <div class="collapse navbar-collapse"> <ul class="nav navbar-nav"> <li><a>Link 1</a></li> <li><a>Link 2</a></li> </ul> </div> <!-- #2 --> </div> </nav>
- Добавьте ‹button› с классами navbar-toggle и свернутыми. Он отображается, когда ширина области просмотра браузера меньше 768 пикселей.
- Оберните элемент ‹ul› в ‹div› классами collapse и navbar-collapse. Это приведет к тому, что элементы управления в списке ‹ul› больше не будут отображаться в мобильном представлении.
Попробуйте добавить класс in в ‹div›.
<div class="collapse navbar-collapse in">
Вы увидите, что добавление этого класса - это механизм для расширения меню.
Чтобы меню работало, нам нужно, чтобы Angular переключал этот класс за нас.
NgClass
Angular предоставляет директиву NgClass как средство для добавления и удаления классов из элементов html. Он принимает в качестве аргумента три разных типа ввода:
- строка - введите строку в ngClass, чтобы добавить один или несколько классов. Несколько классов разделяются пробелом. например
[ngClass]="'first second'"
- Массив - введите массив, содержащий строковые значения классов, которые вы хотите добавить.
- Объект. Введите объект, в котором свойство объекта представляет класс. Для свойства установлено логическое значение, указывающее, следует ли добавить класс к элементу html.
NgClass является частью CommonModule, который, скорее всего, уже был импортирован в модуль, над которым вы работаете.
Мы применим директиву NgClass к нашему шаблону, введя объект в качестве аргумента.
<!-- core/navbar.component.html --> ... <div class="collapse navbar-collapse" [ngClass]="{ 'in': true }"> <ul class="nav navbar-nav"> <li><a>Link 1</a></li> <li><a>Link 2</a></li> </ul> </div> ...
Мы жестко запрограммировали значение true, чтобы получить представление о синтаксисе и убедиться, что он работает. Запустите приложение и убедитесь, что панель навигации открыта с размером экрана мобильного
.
В классе компонента давайте создадим переменную для хранения состояния навигационной панели и создадим метод для использования в качестве обработчика кликов.
// core/navbar.component.ts ... export class NavbarComponent { isIn = false; // store state toggleState() { // click handler let bool = this.isIn; this.isIn = bool === false ? true : false; } }
Теперь мы используем эти свойства компонентов в нашем шаблоне.
<!-- core/navbar.component.html --> <nav class="navbar navbar-inverse navbar-fixed-top"> <div class="container-fluid"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" (click)="toggleState()"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand">Project Manager</a> </div> <div class="collapse navbar-collapse" [ngClass]="{ 'in': isIn }"> <ul class="nav navbar-nav"> <li><a>Link 1</a></li> <li><a>Link 2</a></li> </ul> </div> </div> </nav>
Вот и все. Теперь у нас есть функциональная панель навигации.
Этот же метод можно применить для использования многих компонентов Bootstrap в вашем проекте Angular 2, включая раскрывающиеся меню и складные панели в стиле аккордеона.