2016-04-28 19 views
10

コンポーネントから呼び出す動的パイプを作成したいと思います。角度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]) 
     } 
    } 
    } 
} 

コンポーネントからこのパイプを呼び出したいとします。あなたが呼び出したい場合は

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

編集

答えて

16

はあなたのコンポーネント

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

pipes属性の中でそれをspeciufyし、あなたのテンプレートでそれを使用する必要がありますパイプを直接コンポーネントクラス内に配置するには、インスタンス化してtranformメソッドを呼び出す必要があります。

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

可能なパイプを作るあなたが使用したいの輸入にモジュールを追加するには:

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

私はMyComponentクラスから直接呼び出したいと思います。そのような方法はありますか? – Arron

+1

それを直接インスタンス化し、 'transform'メソッドを呼び出す必要があります。私は私の答えを更新しました... –

+11

これは、パイプ属性がもう存在しないようです。それでもローカルにパイプをインポートする方法はありますか? – johnnyfittizio

2

は、あなたがコンポーネントで使用するパイプを登録する必要がありますそれ

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

あなたは、あなたがモジュールで使用するパイプを登録する必要があり、バージョンRC6でコード

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

htmlテンプレートからではなく、コンポーネントからフィルタを直接呼び出したい – Arron

+0

パイプはHTMLで使用されています。それを直接呼び出す場合は、インスタンス 'let f = new filter()'を作成し、 'let result = f.transform(value、[filterArg]); –

4

からパイプを呼び出したい場合は - >宣言

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

私はちょうどに追加したいです@パシャ・オレニクの答え。イオン2+すべてのパイプはモジュール内で宣言されることを期待するなど、アンギュラ2+:

@NgModule({ 
    declarations: [ 
     AppComponent , 
     filter 
    ] 

はまた、このパイプを宣言する必要がある唯一の場所です。モジュールまたはコンポーネントの下にパイププロパティはなくなりました。

関連する問題