Введение в трубы
Для тех, кто впервые заходит в мой блог: мы создаем онлайн-планировщик, похожий на Google Keep. Более подробно вы можете увидеть здесь: Серия руководств
Сегодня мы узнаем о том, что такое пайп, как создать кастомный пайп, как сделать пайп доступным для всего приложения.
Angular 2 поставляется с набором конвейеров, таких как DatePipe, UpperCasePipe, LowerCasePipe, CurrencyPipe и PercentPipe. Все они сразу же доступны для использования в любом шаблоне.
Если вы работали на кассе со вчерашним кодом, то увидите, что у нас проблемы с печатью даты. Дата имеет неправильный формат. См. это на изображении ниже.
Чтобы исправить это, мы можем легко использовать встроенный доступный DatePipe. Однако давайте пойдем более длинным путем и создадим собственный канал, чтобы решить эту проблему. Это даст нам представление о построении труб.
Откройте общую папку и создайте новый файл с именем: sd.date.pipe.ts
код sd.date.pipe.ts
import { Pipe, PipeTransform } from '@angular/core'; @Pipe({name: 'sddate'}) export class SDDatePipe implements PipeTransform { private days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; private months = ['January', 'Feburary', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; private getDateSuffix(date: number) { let suffixValue = 'th'; switch(date) { case 1: case 21: case 31: suffixValue = 'st'; break; case 2: case 22: suffixValue = 'nd'; break; case 3: case 23: suffixValue = 'rd'; break; } return suffixValue; } // Transform the value transform(value: Date, args: string[]): any { if (!value) return value; return this.days[value.getDay()] + ', ' + value.getDate() + this.getDateSuffix(value.getDate()) + ' ' + this.months[value.getMonth()] + ' ' + value.getFullYear(); } }
Мы импортируем: класс Pipe и интерфейс PipeTransform. Когда мы используем канал в любом шаблоне, значение приходит к методу transform. Там мы можем изменить значение.
Код довольно прямолинеен. Мы получаем значение в виде Дата и форматируем значение в формате «День, Дата (с суффиксом)Месяц Год».
Теперь сделайте его доступным для всего приложения, давайте объявим и экспортируем его из общего модуля.
Откройте файл common.module.ts и обновите код:
import { NgModule, ModuleWithProviders } from '@angular/core'; import { SDFlexDirective } from './sd.flex.directive'; import { SDTextAlignCenterDirective } from './sd.text.center.directive'; import { SDLayoutDirective } from './sd.layout.directive'; import { SDLayoutWrapDirective } from './sd.layout.wrap.directive'; import { SDDatePipe } from './sd.date.pipe'; @NgModule({ declarations: [ SDFlexDirective, SDTextAlignCenterDirective, SDLayoutDirective, SDLayoutWrapDirective, SDDatePipe], exports: [ SDFlexDirective, SDTextAlignCenterDirective, SDLayoutDirective, SDLayoutWrapDirective, SDDatePipe ] }) export class SDCommonModule { static forRoot(): ModuleWithProviders { return { ngModule: SDCommonModule }; } }
Поскольку мы используем CommonModule во всех компонентах, он будет автоматически доступен для любого дочернего компонента.
Чтобы использовать канал в шаблоне HTML, код очень прост. Обновите код в файле planner.header.component.html.
<div class="sd-planner-header"> <h1>Planner</h1> <span class="subtitle">{{selectedDate | sddate}}</span> </div>
Вот и все, и теперь, если вы запустите приложение, вы увидите отформатированный вывод.
Скачать код дня №8:
Я думаю, что мы немного отстаем от нашего графика. С завтрашнего дня мы будем пропускать некоторые концепции, которые мы уже обсуждали. Вы всегда можете получить доступ к коду по дням из конкретной ветки дня. Теперь я объясню новые концепции, которые я изучу, и буду больше работать над кодированием, а не над обсуждениями. Мы должны закончить базовое приложение в течение следующих 7 дней, а затем начать работу над Firebase для хранения и доступа в реальном времени.
Ссылки на путешествие:
- Готовьтесь: Пролог
- День №1: Введение в AngularJS 2
- День №2: Компонентный и HTML дизайн
- День №3: Введение в NgModule
- День №4: Введение в компоненты
- День №5: Введение в Директивы
- День № 6: Пересмотр HTML Planner
- День № 7: Пересмотр компонента Planner — взаимодействие между компонентами в модуле
- День 8. Знакомство с пайпами