Potoki

Angular 2 wprowadził nowy sposób filtrowania danych: pipe (potoki). Potoki są zamiennikiem
dla filtrów Angular 1.x.

Używanie potoków

Podobnie jak filtr, pipe pobiera również dane jako dane wejściowe i przekształca je na pożądaną postać. Na przykład na odpowiedni zapis waluty jak w przykładzie poniżej:

import { Component } from '@angular/core';

@Component({
  selector: 'product-price',
  template: `<p>Total price of product is {{ price | currency }}</p>`
})
export class ProductPrice {
  price = 100.1234;
}

Zobacz przykład [032]

Przekazywanie parametrów

Potok może przyjmować opcjonalne parametry, aby zmodyfikować wyjście. Aby przekazać parametry do potoku, po prostu dodaj dwukropek i wartość parametru na końcu wyrażenia potoku:

pipeName: parameterValue

W ten sposób możesz również przekazać wiele parametrów:

pipeName: parameter1: parameter2
import { Component } from '@angular/core';

@Component({
    selector: 'app-root',
    template: '<p>Total price of product is {{ price | currency: "CAD": true: "1.2-4" }}</p>'
})
export class AppComponent {
  price = 100.123456;
}

Zobacz przykład [034]

Łańcuchy potoków

Możemy łączyć ze sobą potoki, aby użyć wielu potoków w jednym wyrażeniu.

import { Component } from '@angular/core';

@Component({
    selector: 'app-root',
    template: 
 '<p>Total price of product is {{ price | currency: "CAD": true: "1.2-4" | lowercase }}</p>'
})
export class ProductPrice {
  price = 100.123456;
}

Zobacz przykład [033]

Potoki ze stanem

Istnieją dwie kategorie potoków:

  • Stateless Pipes to czyste funkcje, które przepuszczają dane wejściowe, nie pamiętając niczego ani nie powodując wykrywalnych efektów ubocznych. Większość potoków jest bezstanwych.. CurrencyPipe, którego użyliśmy i własny potok, którą stworzyliśmy, to przykłady takich bezstanowych potoków.

  • Stateful Pipes to te, które mogą zarządzać stanem danych. Potok ze stanem tworzy żądanie, przechowuje odpowiedź i wyświetla dane wyjściowe. Stateful Pipes należy stosować ostrożnie.

Angular dostarcza AsyncPipe, który jest stanowy.

AsyncPipe

AsyncPipe może odbierać Promise lubObservable (zob. rozdział "Obserwacje") jako dane wejściowe i zwracać otrzymane wartości po przetworzeniu. Jest to potok ze stanem, ponieważ pobiera dane wejściowe (nie są dane z chwilą uruchomienia potoku).

@Component({
  selector: 'app-root',
  template: `
    <p>Total price of product is {{fetchPrice | async | currency:"CAD":true:"1.2-2"}}</p>
    <p>Seconds: {{seconds | async}} </p>
  `
})
export class AppComponent {
  fetchPrice = new Promise((resolve, reject) => {
    setTimeout(() => resolve(10), 500);
  });

  seconds = Observable.of(0).concat(Observable.interval(1000))
}

Zobacz przykład [036]