我正在使用离子2并尝试在*ngFor=""
中对数组进行排序。
可悲的是它给我一个错误,我不知道为什么,这里是related post
我的烟斗看起来像这样:
import {Injectable, Pipe} from '@angular/core';
import * as _ from 'lodash';
@Pipe({ name: 'order-by' })
export class OrderByPipe {
transform(array, args) {
return _.sortBy(array, args);
}
}
我的* ngFor:
<button ion-item *ngFor="let user of users | order-by:'likes'" >
TypeError: Cannot read property 'toUpperCase' of undefined ("
<ion-list>
<button ion-item [ERROR ->]*ngFor="let user of users | order-by: 'likes'">
其他人有同样的problem。不知道为什么它不起作用..
你是否有另一个管道来排序数组? :) 谢谢 !
答案 0 :(得分:5)
因此,首先arg0n解决了管道名称的第一个问题,它应该没有-
。非常感谢你!
name: sort-by
变为name: sortBy
。
其次,我搜索了一个javascript函数,它将对我的数组进行排序。
然后我的管道:
import {Injectable, Pipe, PipeTransform} from '@angular/core';
@Pipe({ name: 'orderBy' })
export class OrderByPipe implements PipeTransform{
transform(arr){
if(arr === undefined){return null;}
return arr.sort((a, b) => {
if (a.likes < b.likes) {
return 1;
}
if (a.likes > b.likes) {
return -1;
}
return 0;
});
}
}
由于角度2中的异步,我不得不放if(arr === undefined){return null;}
,否则会引发错误:
Cannot read property 'sort' of undefined
最后在我的 template.html 中,我改为:
<button ion-item *ngFor="let user of (users | orderBy)">
(我没有放(users | orderBy) | async
,因为我的数组不再是FireBaseListObservable,而只是一个数组,所以在我看来不是必需的)