Конвеєр приймає дані як вхідні дані та перетворює їх на бажаний вихід. Додайте цей файл конвеєра: orderby.ts
всередині вашої /app
папки.
orderby.ts
import { Pipe,PipeTransform } from "angular2/core";
@Pipe({
name: "orderby"
})
export class OrderByPipe implements PipeTransform {
transform(array:Array<any>, args?) {
if(array) {
let orderByValue = args[0]
let byVal = 1
if(orderByValue.charAt(0) == "!") {
byVal = -1
orderByValue = orderByValue.substring(1)
}
console.log("byVal",byVal);
console.log("orderByValue",orderByValue);
array.sort((a: any, b: any) => {
if(a[orderByValue] < b[orderByValue]) {
return -1*byVal;
} else if (a[orderByValue] > b[orderByValue]) {
return 1*byVal;
} else {
return 0;
}
});
return array;
}
}
}
У файлі компонента (app.component.ts) імпортуйте конвеєр, який ви щойно додали за допомогою: import {OrderByPipe} from './orderby';
Потім додайте *ngFor="#article of articles | orderby:'id'"
всередину вашого шаблону, якщо ви хочете сортувати статті за ідентифікатором у порядку зростання або orderby:'!id'"
у порядку зменшення.
Ми додаємо параметри до труби, слідуючи назві труби двокрапкою (:), а потім значенням параметра
Ми повинні вказати нашу трубу в масиві труб декоратора @Component. pipes: [ OrderByPipe ]
.
app.component.ts
import {Component, OnInit} from 'angular2/core';
import {OrderByPipe} from './orderby';
@Component({
selector: 'my-app',
template: `
<h2>orderby-pipe by N2B</h2>
<p *ngFor="#article of articles | orderby:'id'">
Article title : {{article.title}}
</p>
`,
pipes: [ OrderByPipe ]
})
export class AppComponent{
articles:Array<any>
ngOnInit(){
this.articles = [
{
id: 1,
title: "title1"
},{
id: 2,
title: "title2",
}]
}
}
Більше інформації тут на моєму github і цей пост на моєму веб-сайті