1

我正在尝试在 ngFor 循环中对我的数据进行排序,但是我的自定义管道无法按预期工作,任何人都可以帮助我...

  export class OrderbyLastMessagePipe implements PipeTransform {

  transform(array: Array<string>, args?: any): Array<string> {

    if (array !== undefined && array !== null && args !== '') {

      console.log('args', array);

        const direction = args === 'desc' ? 1 : -1;
        array.sort((a: any, b: any) => {

          console.log('args', a);

          if (a['lastUpdatedat'] < b['lastUpdatedat']) {
                return -1 * direction;
            } else if (a['lastUpdatedat'] > b['lastUpdatedat']) {
                return 1 * direction;
            } else {
                return 0;
            }
        });
    }
    return array;
}

我的 Component ng 容器是这样的,我正在使用两个过滤器,一个用于搜索,另一个用于对特定 lastupdatedat 值(即时间戳)进行排序...

 <ng-container *ngFor="let User of uLists | orderbyLastMessage:'uLists':true">         
4

2 回答 2

0

两个建议:

  1. 如果您使用 Angular CLI 生成管道,则它nameorderByLastMessagePipe. 您可以在代码中看到这一点,如下所示:

    @Pipe({name: 'orderByLastMessagePipe'})

  2. 您传递给管道的参数将始终使其升序排序。对于角管道,多个参数由 . 分隔:orderbyLastMessage:'uLists':true"应该是orderbyLastMessage:'desc'降序排序,升序orderbyLastMessage排序,或者orderbyLastMessage:'asc'

将您的模板更改为:

<ng-container *ngFor="let User of uLists | searchUser:filterUser | orderbyLastMessagePipe:'desc'"> 

看看这是否可以解决您的排序问题。

编辑

管道的数组参数显然不是Array<string>. 如果数组中的对象具有特定类型,则应将参数键入为Array<SomeObject>. 如果没有,任何人都会做Array<any>,或者只是any

正如之前的评论所指出的,由于性能不佳,这个答案不是正确的排序方法。只是试图回答所提出的具体问题。

于 2018-11-20T21:30:31.653 回答
0

非常相似的回答here

正确的角度自定义订单管道排序数组

用户搜索必须使用输入类型文本、keyup 事件和 array.filter 方法来完成。

祝你好运!

于 2018-11-20T22:00:30.467 回答