Angular 2 - Jak przekazać więcej parametrów do Pipe

By Piotr Sikora

  • angular

Pipes są bardzo ważnym elementem frameworka Angular 2. Dzięki nim możesz transformować i filtrować swoje dane. Ale jak sobie z nimi poradzić?

Zacznijmy od prostej definicji pipe, który filtruje dane:

import {Pipe, PipeTransform} from '@angular/core';

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

export class FilterData implements PipeTransform {
    transform(items:any[], args:string[]):any[] {
        if (typeof items === 'object') {
            var resultArray = [];
            if (args.length === 0) {
                resultArray = items;
            }

            else {
                for (let item of items) {
                    if (item.name != null && item.name.match(new RegExp(''+args, 'i'))) {
                        resultArray.push(item);
                    }
                }
            }

            return resultArray;
        }
        else {
            return null;
        }

    }

}

Ten pipe będzie filtrował twoje dane i jako parametr filtrowania przyjmie parametr przekazany jako args:string[]. Więc łatwo gdy chcesz dodać pole tekstowe, które będzie ciągiem filtrującym, musisz połączyć je z twoim pipe w komponencie tak:

<input type="text" #filter (keyup)="0">

Teraz gdy chcesz filtrować dane według ciągu przekazanego do inputa, musisz pobrać wartość elementu #filter tak (filter.data):

<div class="row" *ngFor="let point of (points | filterData: filter.value">

Przekazywanie stringa jako parametru

Aby przekazać więcej parametrów do swojego Pipe, będziesz musiał trochę zmienić definicję Pipe:

export class FilterData implements PipeTransform {
transform(items:any[], args:string[], additionl):any[] {
console.log(additionl);

Jak widzisz, po prostu przekazujesz nowy parametr do swojego Pipe. Teraz gdy chcesz przekazać go z szablonu, musisz dodać go tak jak w przykładzie:

<div class="row" *ngFor="let point of (points | filterData: filter.value : 'name')">

Po tym zobaczysz, że przekazany parametr 'name' zostanie wyświetlony w konsoli.

Przekazywanie tablicy jako parametru

Ale co jeśli chcesz przekazać tablicę elementów? To też jest możliwe! Możesz to zrobić tak bez zmiany definicji Pipe.

<div class="row" *ngFor="let point of (points | filterData: filter.value : ['all','name'])">

Przekazywanie obiektu jako parametru

Tak, możesz przekazać obiekt jako parametr do swojego pipe. Nie jesteś ograniczony gdy chcesz przekazać więcej niż jeden parametr - możesz też przekazać obiekt parametrów. Aby to zrobić, możesz po prostu zrobić to z szablonu swojego komponentu jak opisano w przykładzie kodu:

<div class="row" *ngFor="let point of (points | filterData: filter.value : {name: true})">

Więc to może być baza do rozszerzenia twoich pipes! Nie musisz opierać się na jednym przekazanym elemencie!

Również o Angular:

  1. Zarządzanie stanem i Side Effects (@effect) w NgRx

  2. Angular 2 – Pipes (TypeError: Cannot read property 'length' of undefined)

Categories

Recent Posts

About Me

Piotr Sikora - Process Automation | AI | n8n | Python | JavaScript

Piotr Sikora

Process Automation Specialist

I implement automation that saves time and money, streamlines operations, and increases the predictability of results. Specializing in process automation, AI implementation, and workflow optimization using n8n, Python, and JavaScript.

n8n Workflows

n8n workflow automation templates

Explore my workflow templates on n8n. Ready-to-use automations for blog management, data collection, and AI-powered content processing.

3Workflow Templates

• Auto-Categorize Blog Posts with AI

• Collect LinkedIn Profiles

• Export WordPress Posts for SEO

Podobne artykuły

Odkryj więcej powiązanych treści

DevMeeting Angular 2: Odkrywanie przyszłości

DevMeeting Angular 2: Odkrywanie przyszłości

W ostatni weekend byłem z przyjaciółmi na DevMeeting o Angular 2.0 w Krakowie.

Napraw Angular 2 Pipes: Rozwiąż TypeError

Napraw Angular 2 Pipes: Rozwiąż TypeError

Próbowałem zbudować proste filtrowanie w aplikacji -> Show-ur-bugs

Angular Side Effects z @Effect i NgRx CRUD

Niezbędne fragmenty kodu CRUD. Angular daje świetne narzędzia do budowania aplikacji, a NgRx daje możliwość zarządzania aplikacją ze stanem.