【问题标题】:Angular 2 Pipe argument failsAngular 2 Pipe 参数失败
【发布时间】:2017-07-30 13:29:17
【问题描述】:

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

您是否有另一个管道来对数组进行排序? :) 谢谢 !

【问题讨论】:

  • 浏览器控制台有错误吗?
  • 可能是管道名称?我有一个名为orderBy 的类似管道,它可以工作。另外,我将args 作为Array 传递:['likes']
  • @GünterZöchbauer 控制台错误在我的错误标题下(更新)@Arg0n 装饰器中没有管道名称@Pipe({ name: 'order-by' }) 所以我认为是正确的。您的管道是否按子值排序数组? :)
  • 您在管道定义中错过了implements PipeTransform
  • @luiswill 我是说名称中可能不允许使用“-”,并不是说它在您的代码中不一样。

标签: javascript sorting angular pipe ionic2


【解决方案1】:

问题解决了!

所以首先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;
    });
  }
}

由于 async 在角度 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,而只是一个数组,所以我认为没有必要)

【讨论】:

  • 您似乎不再使用 lodash,因此您可能可以删除导入。正如我之前所说,如果您有兴趣,我还有另一个不受硬编码比较值限制的 OrderByPipe。
  • 好的,谢谢,atm 我只需要一个比较数字的管道,无论如何非常感谢你:)!
猜你喜欢
  • 2016-11-23
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 2017-08-24
  • 2017-02-02
  • 1970-01-01
  • 2017-08-11
  • 2017-08-03
相关资源
最近更新 更多