2016-04-28 14 views
10

Chcę utworzyć dynamiczną rurę, którą mam wywołać z komponentu.jak utworzyć i wywołać rurę z komponentu w kancie 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]) 
     } 
    } 
    } 
} 

Chcę nazwać tę rurę ze składnika.

Odpowiedz

16

Trzeba speciufy go w atrybut komponentu

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

pipes i używać go w szablonie:

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

Edytuj

Jeśli chcesz wywołać rura bezpośrednio w klasie komponentu, należy utworzyć instancję i wywołać jej metodę tranform:

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

Chcę zadzwonić bezpośrednio z klasy MyComponent. Czy jest jakiś sposób, aby to zrobić? – Arron

+1

Należy bezpośrednio utworzyć instancję i wywołać metodę 'transform'. Zaktualizowałem moją odpowiedź ... –

+11

Wygląda na to, że atrybut pipes już nie istnieje. Czy to nadal sposób na importowanie rur na miejscu? – johnnyfittizio

2

Musisz zarejestrować rur, których chcesz użyć w części:

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

Aby rurę dostępny dodać moduł do importu, w którym chcesz używać to

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

Jeśli chcesz połączyć się z rury z kodem

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

Chcę wywołać filtr bezpośrednio z komponentu, a nie z szablonu html – Arron

+0

Rury powinny być używane w HTML. Jeśli chcesz wywołać to bezpośrednio, po prostu stwórz instancję 'let f = new filter()', a następnie nazwij ją jako 'let result = f.transform (value, [filterArg]);' –

4

w wersji RC6 trzeba zarejestrować rur, których chcesz użyć w module -> deklaracji

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

Chciałem tylko dodać do @ Odpowiedź pasha-oleynik. Kątowe 2+ 2+ tym Ionic wszyscy oczekują, że rura być zadeklarowane w module:

@NgModule({ 
    declarations: [ 
     AppComponent , 
     filter 
    ] 

Również jest to jedyne miejsce, które potrzebuje rura być zadeklarowane. W module lub komponencie nie ma już właściwości potoku.

Powiązane problemy