Jak tworzyć niestandardowe rury w Angular w celu eleganckiego wyświetlania danych

Pipes, czyli potoki w Angularze, to koncept często spotykany podczas tworzenia interfejsów użytkownika w tym frameworku. Ale czym dokładnie są i jak funkcjonują?

Angular regularnie plasuje się w czołówce najczęściej wybieranych frameworków i technologii webowych. Potwierdzają to dane z ankiety StackOverflow.

Jego modułowa konstrukcja zaskarbiła sobie sympatię wielu programistów, umożliwiając rozbicie aplikacji na mniejsze, wielokrotnego użytku komponenty. Taka struktura kodu jest łatwiejsza w utrzymaniu i ułatwia współpracę w zespole. Dwukierunkowe wiązanie danych, kompatybilność z różnymi przeglądarkami oraz rozbudowany ekosystem i aktywna społeczność to kolejne elementy, które czynią Angular jednym z liderów wśród frameworków front-end.

W niniejszym artykule przyjrzymy się bliżej potokom w Angularze: ich zastosowaniom, różnym typom wbudowanych potoków oraz sposobom tworzenia własnych, niestandardowych rozwiązań.

Czym są potoki w Angularze?

Potoki (pipes) w Angularze to mechanizm służący do transformacji i formatowania danych w aplikacjach. Działają one na zasadzie przyjmowania wartości wejściowej i zwracania jej przekształconej wersji. Zakres transformacji jest bardzo szeroki – od prostych operacji, takich jak formatowanie waluty czy daty, po bardziej złożone, jak sortowanie czy filtrowanie elementów z listy.

Potoki są kluczowe dla zwiększenia wygody użytkownika, ponieważ prezentują dane w sposób, który jest dla niego łatwy do zrozumienia i interakcji. W Angularze potoki mogą być wbudowane lub tworzone na zamówienie. Bez względu na rodzaj, ich stosowanie przynosi szereg korzyści:

  • Transformacja danych: Jest to podstawowe zadanie potoków. Umożliwiają one prezentowanie danych w czytelnej i zrozumiałej dla użytkownika formie.
  • Czytelność i łatwość utrzymania kodu: W projektach tworzonych zespołowo, kluczowe jest, aby kod był zrozumiały dla wszystkich. Potoki pomagają w utrzymaniu kodu zwięzłym i łatwym w konserwacji.
  • Lokalizacja: Potoki umożliwiają dostosowanie formatu danych do wymagań konkretnego regionu. Na przykład, format daty może różnić się w zależności od kraju, a potok DatePipe pozwala na automatyczne dostosowanie prezentacji.
  • Sortowanie i filtrowanie danych: Potoki OrderPipe czy FilterPipe pomagają w sortowaniu i filtrowaniu danych, co jest istotne w prezentacji list i tabel.

Rodzaje wbudowanych potoków w Angularze

Angular udostępnia szereg wbudowanych potoków, z których każdy ma określone zastosowanie. Oto kilka przykładów:

  • PercentPipe: Służy do konwersji liczb na ciąg znaków reprezentujący wartość procentową.
  • DatePipe: Umożliwia formatowanie dat zgodnie z regułami danego regionu.
  • LowerCasePipe: Przekształca cały tekst na małe litery.
  • UpperCasePipe: Przekształca cały tekst na wielkie litery.
  • CurrencyPipe: Formatuje liczby jako ciągi znaków reprezentujące walutę, zgodnie z regułami regionalnymi.
  • DecimalPipe: Przekształca liczbę na ciąg znaków z separatorem dziesiętnym, uwzględniając reguły danego regionu.

Tworzenie niestandardowych potoków w Angularze

Wbudowane potoki zaspokajają wiele potrzeb, ale czasem konieczne jest stworzenie własnych rozwiązań. Niestandardowe potoki są przydatne, gdy standardowe nie oferują pożądanej funkcjonalności, umożliwiając rozszerzenie możliwości aplikacji.

Wymagania wstępne

Zanim przystąpisz do tworzenia własnych potoków, upewnij się, że spełniasz następujące warunki:

  • Posiadasz zainstalowane środowisko Node.js. Jeśli nie, możesz je pobrać ze strony Node.js.
  • Masz podstawową wiedzę na temat działania Angulara.
  • Masz zainstalowany Angular CLI, który jest niezbędny do tworzenia aplikacji i uruchamiania różnych poleceń. Możesz go zainstalować za pomocą komendy:

npm install -g @angular/cli

Poniżej znajdziesz instrukcję krok po kroku, jak stworzyć własny potok:

#1. Utwórz nowy projekt Angular, używając komendy:

ng new pipes

#2. Przejdź do katalogu utworzonej aplikacji i otwórz ją w swoim ulubionym edytorze kodu (np. VS Code). Możesz użyć komend:

cd pipes i code .

Struktura Twojego projektu powinna wyglądać podobnie do tego:

#3. Utwórz nowy, niestandardowy potok, używając komendy:

ng generate pipe custom-pipe

Po wykonaniu tego polecenia, w folderze projektu pojawią się dwa nowe pliki:

src/app/custom-pipe.pipe.spec.ts

src/app/custom-pipe.pipe.ts

#4. Zdefiniuj logikę potoku

Otwórz plik custom-pipe.pipe.ts. Powinieneś w nim znaleźć następujący kod:

Teraz możemy zaimplementować prostą logikę, która podzieli wprowadzony ciąg znaków na tablicę pojedynczych znaków.

Zmodyfikuj zawartość pliku w następujący sposób:

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
  name: 'customPipe'
})
export class CustomPipePipe implements PipeTransform {
  transform(value: string): string[] {
    return value.split('');
  }
}

#5. Zarejestruj niestandardowy potok. Otwórz plik app.module.ts i upewnij się, że masz deklaracje @NgModule. Sprawdź, czy zawiera następujący kod:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { CustomPipePipe } from './custom-pipe.pipe';

@NgModule({
  declarations: [
    AppComponent,
    CustomPipePipe
  ],

  imports: [
    BrowserModule,
    AppRoutingModule
  ],

  providers: [],
  bootstrap: [AppComponent]
})

export class AppModule { }

#6. Otwórz plik app.component.html, usuń jego zawartość i wstaw następującą linię:

<header>{{ '12345' | customPipe }}</header>

Uruchom serwer, używając komendy:

ng serve

W przeglądarce powinieneś zobaczyć następujący efekt:

Jak łączyć potoki w Angularze

Łączenie potoków umożliwia wykonywanie wielu transformacji na danych za pomocą jednego wyrażenia. Używamy do tego operatora potoku ( | ).

Łączenie potoków ma następujące zalety:

  • Wspiera ponowne wykorzystanie kodu i modułowość: Każdy potok może wykonywać konkretną transformację, którą można zastosować w różnych miejscach aplikacji.
  • Utrzymuje przejrzystość kodu: Szablony z połączonymi potokami są bardziej zwięzłe i łatwiejsze do zrozumienia.
  • Umożliwia dostosowanie: Potoki wbudowane i niestandardowe można ze sobą łączyć, dostosowując je do specyficznych potrzeb.
  • Ułatwia złożone transformacje: Zamiast tworzyć jeden skomplikowany potok, można połączyć kilka prostych, aby uzyskać ten sam efekt.

Możesz łączyć potok niestandardowy z innym, wbudowanym potokiem. Na przykład, możemy połączyć utworzony wcześniej potok customPipe z wbudowanym potokiem lowercase. Oto jak to zrobić:

<p>{{ dataValue | customPipe | lowercase }}</p>

Potoki czyste i nieczyste

W Angularze mamy do dyspozycji dwa typy potoków: czyste i nieczyste.

Czyste potoki

Potoki w Angularze są domyślnie czyste. Oczekuje się, że potok czysty zwróci ten sam wynik dla tych samych danych wejściowych. Potoki te są deterministyczne i bezstanowe.

Mechanizm wykrywania zmian w Angularze automatycznie optymalizuje czyste potoki. Transformacja w czystym potoku jest wykonywana ponownie tylko wtedy, gdy zmieniają się dane wejściowe.

Tak deklarujemy potok jako czysty:

@Pipe({
  name: 'uppercase',
  pure: true

})

export class UppercasePipe {
  transform(value: string): string {
    return value.toUpperCase();
  }
}

Jak widać, właściwość `pure` dekoratora `@Pipe` ma wartość `true`.

Nieczyste potoki

Potok nieczysty będzie wykonywany za każdym razem, gdy Angular wykryje zmianę. Ta zmiana nie musi wynikać ze zmian wejściowych. Nieczyste potoki są przydatne w sytuacjach, w których potrzebny jest dostęp do bieżącego stanu aplikacji. Dostęp do bazy danych czy wysyłanie żądania HTTP to dobre przykłady zastosowań potoków nieczystych.

Oto przykład potoku nieczystego:

@Pipe({
  name: 'sort',
  pure: false
})

export class SortPipe {
  transform(array: any[]): any[] {
    return array.sort();
  }
}

Jak widać, ustawiliśmy właściwość `pure` dekoratora `@Pipe` na `false`, co sprawia, że potok jest nieczysty.

Tworzenie potoków w Angularze: najlepsze praktyki

  • Używaj camelCase dla nazw potoków: Jak widać w przykładzie, nazwę mojego potoku to „customPipe”. Zawsze stosuj tę konwencję, gdy nazwa potoku składa się z więcej niż jednego słowa.
  • Testuj swoje potoki: Samo utworzenie potoku nie gwarantuje, że będzie działał prawidłowo. Testuj potoki, aby upewnić się, że działają zgodnie z oczekiwaniami. Możesz zautomatyzować ten proces za pomocą różnych bibliotek.
  • Unikaj tworzenia skomplikowanych potoków: Możesz pokusić się o stworzenie potoku, który wykonuje wiele zadań. Nie jest to jednak dobre podejście. Najlepszą praktyką jest tworzenie oddzielnych potoków dla każdego zadania.
  • Preferuj potoki czyste: Czysty potok zawsze zwróci to samo wyjście dla tych samych danych wejściowych. Angular może buforować wyniki czystych potoków, co przekłada się na zwiększenie wydajności i responsywności.

Często zadawane pytania

Dlaczego potrzebujemy potoków w Angularze?

Potoki służą do transformacji i formatowania danych w aplikacji. Przyjmują wartość wejściową i zwracają jej przekształconą wersję. Zakres transformacji jest szeroki i obejmuje formatowanie waluty, dat, sortowanie czy filtrowanie.

Co to jest potok niestandardowy?

Jest to potok definiowany przez użytkownika w celu wykonywania unikalnych transformacji. Można go łączyć z potokami wbudowanymi, używając łączenia potoków.

Podaj przykłady wbudowanych potoków w Angularze.

DatePipe, UpperCasePipe, LowerCasePipe, CurrencyPipe, DecimalPipe i PercentPipe.

Co to jest łączenie potoków?

Łączenie potoków to proces łączenia kilku potoków w łańcuch. Umożliwia wykonywanie wielu operacji transformacji danych w jednym wyrażeniu. Do łączenia potoków służy operator | . Można łączyć potoki niestandardowe z wbudowanymi lub innymi potokami niestandardowymi.

Podsumowanie

Mamy nadzieję, że po przeczytaniu tego artykułu, jesteś w stanie wyjaśnić koncepcję potoków w Angularze. Omówiliśmy ich zastosowanie, różne rodzaje wbudowanych potoków, jak i sposób tworzenia własnych. Potoki to podstawowy koncept Angulara, który warto znać, a często jest także poruszany w pytaniach rekrutacyjnych.

Niestandardowe potoki są nieocenione, gdy chcesz zaspokoić konkretne potrzeby lub rozwinąć dynamikę aplikacji. Musisz jednak dobrze zrozumieć mechanizmy działania Angulara, aby tworzyć i wykorzystywać potoki w pełni efektywnie.

Zachęcamy również do eksplorowania bibliotek UI dla Angulara, aby tworzyć aplikacje z najwyższej półki.


newsblog.pl