Сегодня мы рассмотрим интеграцию Project Clarity с Angular CLI.
Что такое ясность проекта? Со своего веб-сайта:
Project Clarity - это система дизайна с открытым исходным кодом, которая объединяет рекомендации по UX, фреймворк HTML / CSS и компоненты Angular 2. Ясность нужна как дизайнерам, так и разработчикам.
Предпосылки
Это руководство требует, чтобы Angular CLI был установлен глобально. Чтобы получить последнюю версию, выполните эту команду:
$ npm install -g @angular/cli@latest
Строим новый проект
Теперь, когда у нас есть команда ng
, мы создадим новый проект Angular CLI, используя ng new
.
$ ng new tutorial-angular-styling-clarity
Эта команда создаст новый каталог с именем tutorial-angular-styling-clarity
и создаст в нем новое приложение Angular.
Установите зависимости Clarity
Project Clarity состоит из ряда зависимостей, которые мы установим с помощью npm и сохраним в нашем devDependencies
:
$ npm install --save-dev clarity-icons clarity-ui clarity-angular @webcomponents/custom-elements@1.0.0-alpha.3 [email protected]
Добавьте файлы CSS
Как только это будет сделано, мы настроим Angular CLI для загрузки правильных скриптов и файлов CSS.
Для этого мы открываем angular-cli.json
из корня нашего нового проекта и находим массив styles
, который в настоящее время имеет одну запись, styles.css
.
В этом массиве styles
мы добавляем ссылку на файлы clarity-icons
и clarity-ui
css, делая его таким:
"styles": [ "../node_modules/clarity-icons/clarity-icons.min.css", "../node_modules/clarity-ui/clarity-ui.min.css", "styles.css" ],
Добавьте файлы JS
Теперь, когда стили на месте, мы добавим 3 файла javascript в массив scripts
, чтобы он выглядел так:
"scripts": [ "../node_modules/mutationobserver-shim/dist/mutationobserver.min.js", "../node_modules/@webcomponents/custom-elements/custom-elements.min.js", "../node_modules/clarity-icons/clarity-icons.min.js" ],
Загрузите модуль Angular
Теперь, когда все зависимости установлены и настроены, мы можем перейти в наш Angular AppModule, чтобы настроить ClarityModule. Это гарантирует, что мы сможем использовать Clarity в нашем приложении.
Откройте src/app/app.module.ts
и добавьте следующую строку вверху списка зависимостей:
import { ClarityModule } from 'clarity-angular';
Он скажет TypeScript загрузить модуль из пакета clarity-angular
. Чтобы использовать его, нам нужно добавить следующую строку в массив imports
внутри декоратора @NgModule
:
ClarityModule.forRoot(),
Базовая конфигурация готова. Теперь, когда вы запустите свое приложение, вы увидите, что сообщение по умолчанию app works!
было оформлено с использованием причудливого шрифта без засечек. Большой!
$ ng serve
Использование ясности проекта
Создание модуля пользовательского интерфейса и компонентов
Project Clarity - довольно продвинутая структура, позволяющая быстро создать законченный интерфейс. Давайте настроим некоторые элементы пользовательского интерфейса.
Чтобы быстро создать структуру для нашего пользовательского интерфейса, мы будем использовать команду ng generate
, или для краткости ng g
.
# create the ui module $ ng g m ui # create the layout component $ ng g c ui/layout -is -it --spec false # create components for header, sidebar and main view $ ng g c ui/layout/header -is -it --spec false $ ng g c ui/layout/sidebar -is -it --spec false $ ng g c ui/layout/main -is -it --spec false
Параметры, которые я использую в команде ng g
, делают следующее:
-is
встроенный стиль вместо отдельного файла CSS -it
встроенный шаблон вместо отдельного файла html. --spec false
пропускает создание файла спецификации для тестирования.
Теперь создаваемая структура выглядит так:
./src/app/ui ├── layout │ ├── header │ │ └── header.component.ts │ ├── layout.component.ts │ ├── main │ │ └── main.component.ts │ └── sidebar │ └── sidebar.component.ts └── ui.module.ts
Чтобы использовать эти компоненты в нашем приложении, нам нужно импортировать только что созданный UiModule
в AppModule
. Открываем src/app/app.module.ts
, добавляем оператор импорта:
import { UiModule } from './ui/ui.module';
И добавьте UiModule
в массив imports
внутри декоратора @NgModule
.
Поскольку мы будем использовать Clarity внутри нашего UiModule, нам также необходимо импортировать его туда. Открываем src/app/ui/ui.module.ts
, добавляем оператор импорта:
import { ClarityModule } from 'clarity-angular';
И добавьте ClarityModule
в массив imports
внутри декоратора @NgModule
, как и раньше, но теперь без вызова метода .forChild()
.
Последнее, что нужно сделать внутри UiModule
, - это добавить массив exports
и экспортировать LayoutModule
, поскольку мы будем ссылаться на него в нашем AppComponent
.
UiModule
теперь будет выглядеть примерно так:
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { LayoutComponent } from './layout/layout.component'; import { HeaderComponent } from './layout/header/header.component'; import { SidebarComponent } from './layout/sidebar/sidebar.component'; import { MainComponent } from './layout/main/main.component'; import { ClarityModule } from 'clarity-angular'; @NgModule({ imports: [ CommonModule, ClarityModule, ], declarations: [ LayoutComponent, HeaderComponent, SidebarComponent, MainComponent, ], exports: [ LayoutComponent, ] }) export class UiModule { }
Подключение и создание компонентов пользовательского интерфейса
AppComponent
Мы начинаем с обновления шаблона нашего основного AppComponent
, открываем src/app/app.component.html
и меняем содержимое на это:
<app-layout> <h1>{{title}}</h1> </app-layout>
Здесь мы ссылаемся на LayoutComponent
с помощью селектора app-layout
.
LayoutComponent
Откройте src/app/ui/layout.component.ts
и обновите template
:
template: ` <div class="main-container"> <app-header></app-header> <app-main> <ng-content></ng-content> </app-main> </div> `,
Это оборачивает наш контент в div
с классом main-container
, затем мы ссылаемся на HeaderComponent
и MainComponent
, которые мы говорим для встраивания содержимого приложения с помощью компонента ng-content
.
HeaderComponent
Откройте src/app/ui/layout/header/header.component.ts
и обновите шаблон:
template: ` <header class="header-1"> <div class="branding"> <a class="nav-link"> <clr-icon shape="shield"></clr-icon> <span class="title">Angular CLI</span> </a> </div> <div class="header-nav"> <a class="active nav-link nav-icon"> <clr-icon shape="home"></clr-icon> </a> <a class=" nav-link nav-icon"> <clr-icon shape="cog"></clr-icon> </a> </div> <form class="search"> <label for="search_input"> <input id="search_input" type="text" placeholder="Search for keywords..."> </label> </form> <div class="header-actions"> <clr-dropdown class="dropdown bottom-right"> <button class="nav-icon" clrDropdownToggle> <clr-icon shape="user"></clr-icon> <clr-icon shape="caret down"></clr-icon> </button> <div class="dropdown-menu"> <a clrDropdownItem>About</a> <a clrDropdownItem>Preferences</a> <a clrDropdownItem>Log out</a> </div> </clr-dropdown> </div> </header> <nav class="subnav"> <ul class="nav"> <li class="nav-item"> <a class="nav-link active" href="#">Dashboard</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Projects</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Reports</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Users</a> </li> </ul> </nav> `,
Это довольно большой фрагмент, но его должно быть довольно легко понять, что он делает:
- Определите заголовок с классом
header-1
(который устанавливает цвет от 1 до 6). - Добавьте брендинг, используя значок и заголовок.
- Добавьте 2 значка заголовка: «Домой» и «Настройки».
- Добавьте поле поиска с текстом-заполнителем.
- Добавьте значок пользователя и раскрывающийся список с 3 элементами.
- Добавьте под-навигацию с 4 ссылками.
MainComponent
Мы почти на месте. Откройте src/app/ui/layout/main/main.component.ts
и обновите шаблон:
template: ` <div class="content-container"> <div class="content-area"> <ng-content></ng-content> </div> <app-sidebar class="sidenav"></app-sidebar> </div> `,
В этом компоненте мы заключаем боковую панель и область содержимого в div
с классом content-container
.
Под селектором app-sidebar
мы создаем еще один div
с классом content-area
, здесь будет отображаться основное содержимое нашего приложения. Мы делаем это с помощью встроенного в Angular компонента ng-content
.
SidebarComponent
Последний! Откройте src/app/ui/layout/sidebar/sidebar.component.ts
и обновите шаблон:
template: ` <nav> <section class="sidenav-content"> <a class="nav-link active">Overview</a> <section class="nav-group collapsible"> <input id="tabexample1" type="checkbox"> <label for="tabexample1">Content</label> <ul class="nav-list"> <li><a class="nav-link">Projects</a></li> <li><a class="nav-link">Reports</a></li> </ul> </section> <section class="nav-group collapsible"> <input id="tabexample2" type="checkbox"> <label for="tabexample2">System</label> <ul class="nav-list"> <li><a class="nav-link">Users</a></li> <li><a class="nav-link">Settings</a></li> </ul> </section> </section> </nav> `,
И вот он, создание базового пользовательского интерфейса, созданного с помощью Angular CLI и Project Clarity.
Чертовски круто, если вы спросите меня! Проверить живую версию можно здесь: https://beeman.github.io/tutorial-angular-styling-clarity/
Project Clarity может предложить гораздо больше, и все это вы можете найти на веб-сайте:
Https://vmware.github.io/clarity/documentation
Как обычно, демонстрационный проект можно найти на моем GitHub:
Https://github.com/beeman/tutorial-angular-styling-clarity
Если у вас есть какие-либо проблемы или вопросы, используйте комментарии ниже или напишите мне в Twitter @beeman_nl.
Удачного кодирования!
Нужна помощь?
Нужна поддержка для вашего проекта Angular, Ionic, Firebase, NodeJS или TypeScript? Ищете долгосрочное наставничество? Не стесняйтесь заказывать со мной сеанс 1-на-1 на CodeMentor.