Angular 2 Pipe参数失败

时间:2017-03-09 14:05:36

标签: javascript sorting angular pipe ionic2

我正在使用离子2并尝试在*ngFor=""中对数组进行排序。

可悲的是它给我一个错误,我不知道为什么,这里是related post

我的对象数组如下所示:this

我的烟斗看起来像这样:

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。不知道为什么它不起作用..

你是否有另一个管道来排序数组? :) 谢谢 !

1 个答案:

答案 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,而只是一个数组,所以在我看来不是必需的)