2017-07-20 2 views
0

Ich habe ein Array von Objekten und ich möchte sie nach Größe sortieren, die ein Attribut des Objekts ist. Das Objekt besteht aus {Name, Größe} .Ich möchte die Elemente nach ihrer Größe sortieren.OrderBy Pipe funktioniert nicht auf Array von Objekten in agular 4?

Service:

search(term: string): Observable<Array<Object>> { 
    let apiURL = `${this.apiRoot}?search=${term}`; 
    return this.http.get(apiURL) 
      .map(res => { 
      return res.json().results.map(items => { 
       return {name: items.name, population: items.population}; 
      }); 
      }); 
} 

Komponente:

ngOnInit() { 
    this.myshared.getSaveBtnStatus().subscribe(data => this.isSuccess = data); 
    this.searchField = new FormControl(); 
    this.searchField.valueChanges 
    .debounceTime(400) 
    .distinctUntilChanged() 
    .switchMap(term => this.myservice.search(term)) 
    .subscribe(value => { 
     this.results = value; 
     console.log(this.results); 
    } 
    ); 

HTML:

<ul class="list-group"> 
<li class="list-group-item" *ngFor="let items of results"> 
{{items.name | orderBy : ['population'] }} 
</li> 

+0

Angular2 + 'OrderByPipe' https://angular.io/guide/pipes#no-filter-pipe –

+0

Angular tut nicht haben will Stellen Sie 'orderBy' Rohr aus der Box. –

Antwort

1

Angular 2+ hat nicht orderBy Rohr. Aber es ist sehr einfach, einen für das zu bauen, was Sie wollen.

Hier ist eine einfache Implementierung des Rohres zu erreichen, was Sie

import { Pipe, PipeTransform } from "@angular/core"; 

@Pipe({ 
    name: "orderBy" 
}) 
export class OrderByPipe implements PipeTransform { 

    transform(value: any[], property: any, descending?: boolean): any { 
    if (!value || value.length) { 
     return value; 
    } 

    value.sort((first: any, second: any): number => { 
     return first[property] > second[property] ? 1 : -1; 
    }); 

    if (descending) { 
     return value.reverse(); 
    } 

    return value; 
    } 
} 
Verwandte Themen