Пайпы в Angular представляют собой мощный инструмент для трансформации данных в шаблонах. Они позволяют изменять отображение значений без вмешательства в бизнес-логику компонента. Одним из ключевых возможностей является использование параметров, которые делают пайпы более гибкими и универсальными.
Базовый синтаксис пайпа с параметрами выглядит следующим образом:
{{ value | pipeName:param1:param2:... }}
value — исходное значение, которое нужно
преобразовать.pipeName — имя пайпа.param1, param2, ... — дополнительные параметры,
передаваемые пайпу для управления его поведением.Пример использования стандартного пайпа date с
параметром формата:
{{ today | date:'fullDate' }}
Здесь 'fullDate' — параметр, задающий формат отображения
даты. Пайп принимает его в методе transform.
Пользовательские пайпы создаются с помощью декоратора
@Pipe и реализации интерфейса PipeTransform.
Пример кастомного пайпа, который форматирует строку с различными
стилями:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'textFormat'
})
export class TextFormatPipe implements PipeTransform {
transform(value: string, style: string = 'uppercase'): string {
switch(style) {
case 'lowercase':
return value.toLowerCase();
case 'capitalize':
return value.replace(/\b\w/g, char => char.toUpperCase());
default:
return value.toUpperCase();
}
}
}
Использование этого пайпа в шаблоне:
<p>{{ 'angular framework' | textFormat:'capitalize' }}</p>
Результат будет: Angular Framework.
Пайпы могут принимать несколько параметров, разделённых двоеточием. Это позволяет создавать более сложные преобразования данных.
Пример пайпа для форматирования чисел с учётом валюты и количества знаков после запятой:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'currencyFormat'
})
export class CurrencyFormatPipe implements PipeTransform {
transform(value: number, currency: string = 'USD', decimals: number = 2): string {
return `${value.toFixed(decimals)} ${currency}`;
}
}
Использование:
<p>{{ 1234.567 | currencyFormat:'EUR':3 }}</p>
Результат: 1234.567 EUR.
Пайпы могут работать с асинхронными данными, например, с
Observable или Promise. Для этого используется
встроенный пайп async, который может сочетаться с другими
параметризованными пайпами:
<p>{{ userObservable | async | textFormat:'capitalize' }}</p>
Это позволяет применять параметры к значениям, получаемым асинхронно, без необходимости подписки в компоненте.
transform рекомендуется задавать значения параметров по
умолчанию, чтобы пайп был устойчив к отсутствию аргументов.pure: true (по умолчанию) в
декораторе @Pipe, чтобы Angular кэшировал результат и не
вызывал пайп при каждом цикле обнаружения изменений.Параметры пайпов могут быть не только примитивными типами, но и объектами, массивами, функциями. Это расширяет возможности кастомизации отображения данных.
Пример пайпа для фильтрации массива объектов по ключу:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'filterByKey'
})
export class FilterByKeyPipe implements PipeTransform {
transform(items: any[], key: string, value: any): any[] {
if (!items || !key || value === undefined) return items;
return items.filter(item => item[key] === value);
}
}
Использование:
<li *ngFor="let user of users | filterByKey:'role':'admin'">
{{ user.name }}
</li>
Параметризованные пайпы повышают гибкость шаблонов Angular и делают код более декларативным, позволяя концентрироваться на отображении данных без изменения логики компонентов. Грамотное использование параметров упрощает поддержку и расширение интерфейсов.