2016-04-28 6 views
10

Voglio creare una pipe dinamica che chiamerò dal componente.come creare e chiamare una pipe dal componente in angular 2?

import {Component, Pipe, PipeTransform} from 'angular2/core'; 

@Pipe({ name: 'filter', pure: false }) 
export class filter implements PipeTransform { 
    transform(value) { 
    this.items1=value; 
    this.ticket1 = []; 
    if (this.items1.length >0) { 
     for (var i = 0; i < this.items1.length; i++) { 
     this.ticket1.push(this.items1[i]) 
     } 
    } 
    } 
} 

Voglio chiamare questo tubo dal componente.

risposta

16

È necessario speciufy entro l'attributo pipes del componente

@Component({ 
    pipes: [ filter ] 
}) 
export class MyComponent { 
    (...) 
} 

e utilizzarlo nel modello:

{{someArray | filter}} 
<div *ngFor="someArray | filter">(...)</div> 

Modifica

Se si desidera chiamare il pipe direttamente all'interno della classe del componente, è necessario istanziarlo e chiamare il suo metodo tranform:

@Component({ 
    (...) 
}) 
export class MyComponent { 
    constructor() { 
    let filterPipe = new filter(); 
    let arr = [ ... ]; 
    var fiteredArr = filterPipe.transform(arr); 
    } 
    (...) 
} 
+0

voglio chiamare direttamente dalla classe MyComponent .. c'è un modo per farlo? – Arron

+1

È necessario creare un'istanza direttamente e chiamare il metodo 'transform'. Ho aggiornato la mia risposta ... –

+11

Sembra che l'attributo pipe non esista più. È ancora il modo di importare un pipe localmente? – johnnyfittizio

2

È necessario registrare i tubi che si desidera utilizzare in un componente:

@Component({ 
    ... 
    pipes: [filter], 
    template: ` 
<div *ngFor="let item of someData | filter">{{item}}</div> 
` 
    ...}) 
class SomeComponent { 
    someData = [ ... ]; 
} 
@NgModule({ 
    imports: [CommonModule], 
    declarations: [filter] 
}) 
export class MyFilterModule() 

Per rendere il tubo disponibili aggiungere il modulo alle importazioni in cui si desidera utilizzare it

@NgModule({ 
    declarations: [AppComponent, SomeComponent], 
    imports: [BrowserModule, MyFilterModule] 
}) 
export class AppModuleModule() 

Se si desidera chiamare il tubo dal codice

let f = new filter(); 
f.transform(value, filterArg); 
+0

voglio chiamare il filtro direttamente dal componente, non dal modello html – Arron

+0

Si suppone che i pipe vengano utilizzati in HTML. Se vuoi chiamarlo direttamente, crea semplicemente un'istanza 'let f = new filter()' e quindi chiamala come 'let result = f.transform (value, [filterArg]);' –

4

Nella versione RC6 è necessario registrare i tubi che si desidera utilizzare in un modulo -> dichiarazioni

@NgModule({ 
    declarations: [ 
     AppComponent , 
     filter 
    ].... 
3

volevo solo aggiungere a @ risposta pasha-oleynik. Angolare 2+ 2+ compresi ionico tutti si aspettano il tubo da dichiarare nel modulo:

@NgModule({ 
    declarations: [ 
     AppComponent , 
     filter 
    ] 

Anche questo è l'unico posto che il tubo deve essere dichiarato. Non esiste più una proprietà pipe sotto un modulo o componente.