コンポーネントから呼び出すダイナミックパイプを作成します。
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])
}
}
}
}
コンポーネントからこのパイプを呼び出したいです。
コンポーネントのpipes
属性内で指定する必要があります
@Component({
pipes: [ filter ]
})
export class MyComponent {
(...)
}
テンプレートで使用します:
{{someArray | filter}}
<div *ngFor="someArray | filter">(...)</div>
編集
コンポーネントクラス内でパイプを直接呼び出す場合は、インスタンス化して、そのtranform
メソッドを呼び出す必要があります。
@Component({
(...)
})
export class MyComponent {
constructor() {
let filterPipe = new filter();
let arr = [ ... ];
var fiteredArr = filterPipe.transform(arr);
}
(...)
}
@ pasha-oleynik answerに追加したかっただけです。 Angular 2+ Ionic 2+を含むすべてのモジュールでパイプが宣言されることを期待する:
@NgModule({
declarations: [
AppComponent ,
filter
]
また、これはパイプを宣言する必要がある唯一の場所です。モジュールまたはコンポーネントの下にパイププロパティはなくなりました。
バージョンrc6では、モジュールで使用するパイプを登録する必要があります->宣言
@NgModule({
declarations: [
AppComponent ,
filter
]....
コンポーネントで使用するパイプを登録する必要があります。
@Component({
...
pipes: [filter],
template: `
<div *ngFor="let item of someData | filter">{{item}}</div>
`
...})
class SomeComponent {
someData = [ ... ];
}
@NgModule({
imports: [CommonModule],
declarations: [filter]
})
export class MyFilterModule()
パイプを使用可能にするには、モジュールを使用するインポートに追加します
@NgModule({
declarations: [AppComponent, SomeComponent],
imports: [BrowserModule, MyFilterModule]
})
export class AppModuleModule()
コードからパイプを呼び出したい場合
let f = new filter();
f.transform(value, filterArg);
パイプを異なるモジュールで複数回使用する場合は、すべてのパイプを1つのモジュール(たとえば、PipesAggrModule
)に集約し、このモジュールを目的のモジュールにインポートすることをお勧めします。例えば:
my-pipe.module.ts
@Pipe({name: 'MyPipe'})
export class MyPipe { ... }
pipes-aggr.module.ts
:
@NgModule({
imports: [
CommonModule
],
exports: [
...
MyPipe,
MyPipe2,
...
],
declarations: [..., MyPipe, MyPipe2, ...]
})
export class PipesAggrModule {}
次に、パイプを使用するには、PipesAggrModule
をインポートして目的のモジュールにインポートします。
my.module.ts
@NgModule({
imports: [
CommonModule,
PipesAggrModule
],
...
}
export class MyModule {}