Pipes sind ein weiterer nützlicher Baustein im Werkzeugkasten von Angular. Sie kommen zum Einsatz, wenn ein Wert für die Anzeige umgewandelt werden soll, der konvertierte Wert jedoch nur in der View benötigt wird. Typische Beispiele sind die Formatierung von Zahlen mit Dezimaltrennzeichen oder eine benutzerfreundliche Darstellung von Datum und Uhrzeit. Pipes selbst sind einfache Funktionen, die einen Eingabewert entgegennehmen und einen transformierten Wert zurückgeben. Einige Pipes akzeptiern zusätzlich Parameter, um das Ergebnis weiter anzupassen. Ein großer Vorteil von Pipes ist ihre Wiederverwendbarkeit: Eine einmal deklarierte Pipe kann in der gesamten Anwendung verwendet werden. Eigene, benutzerdefinierte Pipes lassen sich leicht erstellen. Dieses Thema wird jedoch in einem späteren Kapitel behandelt denn Angular stellt bereits eine Reihe integrierter Pipes zur Verfügung, die viele alltägliche Aufgaben in der Entwicklung erheblich vereinfachen. Die integrierten Pipes sind bereits sehr leistungsfähig und bieten eine einfache Möglichkeit, Daten direkt im Template zu formatieren, ohne zusätzlichen Code in der Komponente zu schreiben. Man sollte sie kennen vor allem, weil ihre Verwendung sehr einfach ist. Die einfachsten Beispiele für Pipes sind vermutlich uppercase und lowercase. Sie konvertieren einen Text vollständig in Groß- beziehungsweise Kleinbuchstaben. Die Syntax ist dabei sehr einfach, besonders, wenn die Pipe innerhalb einer String Interpolation verwendet wird. Hinter dem Variablennamen folgt ein senkrechter Strich (das sogenannte Pipe-Symbol), gefolgt vom Namen der Pipe. Mehr ist an dieser Stelle nicht erforderlich.
Uppercase and Lowercase Pipes
{{ sampleName | uppercase }}{{ sampleName | lowercase }}
Eng mit den zwei vorherigen Pipes verwand ist die titlecase-Pipe. Sie wandelt jeden Wortanfang in einen Großbuchstaben um. Solch eine Formatierung kommt oft bei Überschriften zum Einsatz.
Titlecase Pipes
{{ sampleName | titlecase }}
Ein weiteres häufig genutztes Beispiel ist die number-Pipe. Sie dient zur Formatierung von Zahlen und kann einen Parameter entgegennehmen. Der durch einen Punkt (.) getrennte Format-String bestimmt, wie die Zahl angezeigt wird. Der erste Wert definiert die Mindestanzahl der Ziffern vor dem Komma. Ist die Zahl selbst nicht groß genug, wird sie mit führenden Nullen aufgefüllt.Der zweite Teil legt die minimale und maximale Anzahl der Nachkommastellen fest. Auch hier werden gegebenenfalls Nullen ergänzt, wenn die Zahl nicht genügend Nachkommastellen besitzt. Wird die Anzahl der Nachkommastellen reduziert, erfolgt automatisch eine Rundung des Werts.
Number Pipe with formatting
{{ sampleValue | number: '1.2-2' }}{{ sampleValue | number: '8.2-3' }}{{ sampleValue | number: '1.8' }}
Mit der number-Pipe verwand ist die currency-Pipe zur Anzeige von Währungen. Durch einen zusätzliche Parameter wird bestimmt, ob das Währungssymbol (zb. € oder $) angezeigt werden soll. oder lediglich der Währungscode.
Currency Pipe with Currency Symbol
{{ sampleCurrency | currency: 'EUR' :true : '1.3-3' }}{{ sampleCurrency | currency: 'JPY' :true : '1.2' }}Currency Pipe with Currency Name
{{ sampleCurrency | currency: 'EUR' :false : '1.3-3' }}{{ sampleCurrency | currency: 'JPY' :false : '1.2' }}
Die DatePipe dient in erster Linie zur Formatierung von Werten des Typs Date. Da dieser Datentyp sowohl das Datum als auch die Uhrzeit enthält, wird nicht in jeder Situation beides benötigt. Mit der DatePipe lässt sich gezielt steuern, welche Bestandteile angezeigt werden sollen. Angular stellt dafür bereits zwölf vordefinierte Formate bereit, um Datum und Zeit unterschiedlich darzustellen. Für eine vollständige Übersicht empfiehlt sich ein Blick in die offizielle Angular-Dokumentation.
Date Pipe with different formatting
{{ sampleDate | date }}{{ sampleDate | date:'short' }}{{ sampleDate | date:'mediumTime' }}
Die json-Pipe ist hilfreich, um den Inhalt eines Objekts sichtbar zu machen. Eine einfache String-Interpolation eines Objekts würde lediglich den Objekttyp ausgeben. In der Regel also etwas wie [object Object]. Das ist selten das gewünschte Ergebnis. Wird dagegen die json-Pipe verwendet, zeigt die Ausgabe die komplette Struktur des Objekts im JSON-Format. Das ist besonders praktisch, um während der Entwicklung schnell zu überprüfen, welche Daten tatsächlich vorliegen.
An Object with and without JSON Pipe
{{ sampleObject }}{{ sampleObject | json }}
Die percent-Pipe kommt zum Einsatz, um einen Dezimalbruch als Prozentwert darzustellen. Der Wert 1.0 entspricht dabei 100 %, 0.5 ergibt 50 %, und 5 wird als 500 % angezeigt.
Percent Pipes
{{ percentageSample | percent }}
Die slice-Pipe wird verwendet, wenn nur ein Teilbereich eines Arrays in der View angezeigt werden soll. Sie akzeptiert zwei Parameter, die den Start- und den Endindex des anzuzeigenden Bereichs festlegen. Wie bei Arrays üblich, besitzt das erste Element den Index 0. Wird eine Endposition angegeben, die größer ist als die tatsächliche Länge des Arrays, führt das erfreulicherweise nicht zu einem Fehler. Die Ausgabe endet einfach mit dem letzten verfügbaren Element.
Slice Pipes
{{ arraySample | slice: 0:4 }}{{ arraySample | slice: 2:15 }}
Zum Abschluss der komplette Code der TypeSkript-Komponente. Beachtenswert ist, dass jede Pipe einzeln importiert werden muss.
Inbuild Pipes Sample
Uppercase and Lowercase Pipes
{{ sampleName | uppercase }}{{ sampleName | lowercase }}Titlecase Pipes
{{ sampleName | titlecase }}Number Pipe with formatting
{{ sampleValue | number: '1.2-2' }}{{ sampleValue | number: '8.2-3' }}{{ sampleValue | number: '1.8' }}Currency Pipe with Currency Symbol
{{ sampleCurrency | currency: 'EUR' :true : '1.3-3' }}{{ sampleCurrency | currency: 'JPY' :true : '1.2' }}Currency Pipe with Currency Name
{{ sampleCurrency | currency: 'EUR' :false : '1.3-3' }}{{ sampleCurrency | currency: 'JPY' :false : '1.2' }}Date Pipe with different formatting
{{ sampleDate | date }}{{ sampleDate | date:'short' }}{{ sampleDate | date:'mediumTime' }}An Object with and without JSON Pipe
{{ sampleObject }}{{ sampleObject | json }}Percent Pipes
{{ percentageSample | percent }}Slice Pipes
{{ arraySample | slice: 0:4 }}{{ arraySample | slice: 2:15 }}
import { Component } from '@angular/core'; import { CurrencyPipe, DatePipe, DecimalPipe, LowerCasePipe, UpperCasePipe, JsonPipe, PercentPipe, SlicePipe, TitleCasePipe } from "@angular/common"; @Component({ selector: 'app-sample-pipes', standalone: true, imports: [ UpperCasePipe, LowerCasePipe, DecimalPipe, CurrencyPipe, DatePipe, JsonPipe, PercentPipe, SlicePipe, TitleCasePipe ], templateUrl: './sample-pipes.component.html', styleUrl: './sample-pipes.component.scss' }) export class SamplePipesComponent { sampleName : string = 'John of Johnson, 123 Main St.'; sampleValue : number = 12345.6789; sampleCurrency : number = 12345.6789; sampleDate : Date = new Date(); sampleObject : any = { name: 'John', lastname: 'Foe', age: 30 , address: {street: 'Main St.', city: 'Grovers Mill', state: 'NJ'} }; percentageSample : number = 0.5; arraySample : Array = ['a1','b2','c3','d4','e5',"d6"]; }