Как создать и вызвать канал из компонента в 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])
}
}
}
}
Я хочу вызвать этот канал из компонента.
Ответы
Ответ 1
Вы должны указать это в атрибуте pipes
вашего компонента
@Component({
pipes: [ filter ]
})
export class MyComponent {
(...)
}
и используйте его в своем шаблоне:
{{someArray | filter}}
<div *ngFor="someArray | filter">(...)</div>
Edit
Если вы хотите вызвать канал непосредственно в классе компонента, вам нужно создать его экземпляр и вызвать его метод tranform
:
@Component({
(...)
})
export class MyComponent {
constructor() {
let filterPipe = new filter();
let arr = [ ... ];
var fiteredArr = filterPipe.transform(arr);
}
(...)
}
Ответ 2
В версии rc6 вам необходимо зарегистрировать каналы, которые вы хотите использовать в модуле → объявления
@NgModule({
declarations: [
AppComponent ,
filter
]....
Ответ 3
Я просто хотел добавить к ответу @pasha-oleynik. Angular 2+, включая Ionic 2+, ожидают, что труба будет объявлена в модуле:
@NgModule({
declarations: [
AppComponent ,
filter
]
Также это единственное место, где труба должна быть объявлена. Больше нет свойства канала под модулем или компонентом.
Ответ 4
Вам необходимо зарегистрировать каналы, которые вы хотите использовать в компоненте:
@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);
Ответ 5
Если вы хотите использовать свой канал в разных модулях несколько раз, я предлагаю объединить все ваши каналы в один модуль (например, PipesAggrModule
), а затем импортировать этот модуль в 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
в PipesAggrModule
модуль.
my.module.ts
@NgModule({
imports: [
CommonModule,
PipesAggrModule
],
...
}
export class MyModule {}