Pipe¶
Angular pipe, или просто фильтр, нужен для преобразования данных прямо в HTML-шаблоне. Например, отображение даты и времени в желаемом формате или задание формата вывода числового значения.
В Angular имеется ряд встроенных фильтров, но также предусмотрена возможность создания собственных.
Рассмотрим пример использования встроенного date pipe.
date-pipe-example.component.ts
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Как видно из примера, наименование Angular pipe указывается после символа |
, следующим за значением, которое необходимо преобразовать.
Некоторые Angular фильтры, как date
, принимают параметры, передаваемые после имени фильтра и разделяемые символом :
. В данном примере передается формат отображения даты. Подробно со всеми аргументами date можно ознакомиться на официальном сайте.
Ниже приведен список некоторых наиболее часто используемых встроенных Angular pipe:
date
— преобразование даты;number
— преобразование числа;uppercase
(lowercase
) — приведение строкового значения в верхний (нижний) регистр;slice
— используется для ограничения вывода информации, в качестве параметров принимает начало и конец интервала отображаемых данных, применяется совместно с директивой*ngFor
.
Пример использования slice
.
slice-pipe-example.component.ts
1 2 3 4 5 6 7 8 9 10 11 |
|
Отсчет выводимых элементов, как и индекс, начинается с нуля.
Полный список встроенных Angular pipe также можно найти в документации.
К одному значению допустимо одновременное применение нескольких фильтров.
1 |
|
Встроенные фильтры подходят в основном для решения "базовых" задач. Поэтому часто требуется создавать собственные (Angular custom pipe).
Рассмотрим на примере создание cutTextPipe
, который обрезает слово, если его длина превышает заданное количество символов, и добавляет в конце многоточие.
cut-text.pipe.ts
1 2 3 4 5 6 7 8 9 10 11 |
|
Angular pipe — это класс, который предваряется декоратором @Pipe()
и реализует интерфейс PipeTransform
с одним единственным методом transform()
.
В примере декоратору в качестве аргумента передается объект со свойством name
, значение которого является именем фильтра. Именно по нему он будет вызываться в HTML-шаблоне.
Метод transform()
в качестве первого аргумента принимает преобразуемое значение, далее — параметры в порядке их передачи в HTML-шаблоне. Метод обязательно должен возвращать итоговое значение.
Как и компоненты, фильтры должны объявляться в свойстве declarations
того модуля, в котором они будут использоваться.
Pure & Impure Angular pipes¶
Различают два типа фильтров: pure
(по умолчанию) и impure
.
Отличаются они по принципу работы механизма отслеживания изменений.
Для первого типа обновление выражения происходит только при его прямом изменении или смены ссылки, если речь идет о массивах и объектах.
Выражение с примененным к нему фильтром второго типа (impure
) будет обновляться при любом изменении данных, а также в ответ на любое фиксирующееся в приложении событие, например, клик мыши.
Использование фильтров второго типа требуется в том случае, если фильтру передается массив или объект, изменение структуры или данных которых должно инициировать повторную обработку.
Для создания impure pipe в объекте, передаваемому декоратору, необходимо указать значение свойства pure false.
1 2 3 4 |
|
Создавать impure Angular pipe следует в исключительных случаях, поскольку такое частое обновление значения выражения требует больших ресурсов.