【问题标题】:Custom OrderPipe is not working in angular 4?自定义 OrderPipe 在 Angular 4 中不起作用?
【发布时间】:2017-07-20 18:48:55
【问题描述】:

我创建了一个自定义管道来对对象数组进行排序,但管道不工作? 我的 [ {name , population , variable }] 数组。我想根据人口对对象数组进行排序

管道:

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

     @Pipe ({
    name:'order'
    })

    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;
  }
} 

HTML:

 <ul>
 <li *ngFor="let items of results"
   {{items.name | order:'population':'true'  }}
</li>
</ul>

【问题讨论】:

标签: angular angularjs-orderby


【解决方案1】:

你应该有这样的

<li *ngFor="let items of results | order:'population':'true'">
   {{items.name}}
</li>

另外你的Pipe有问题你需要检查数组的长度是否为0,否则它总是会返回相同的数组而不进行排序

 if (!value || value.length == 0) {
      return value;
 }

DEMO

【讨论】:

  • 它不起作用
  • {{items.name}} 这是我的html,结果是从服务器获取的。
  • 你能把json发一下吗
  • results 是对象数组,我想根据对象的 population 属性对数组进行排序。
  • 你说的是哪个json
  • 【解决方案2】:

    您正在将items.name 传递给管道。

    这是一个 string 没有属性 population

    【讨论】:

    • 那么我该怎么做.. 我只想在浏览器上显示 items.name
    【解决方案3】:

    我发现了一个很棒的 npm 包,其中包含一些常见的可重用管道。可以用https://github.com/danrevah/ngx-pipes#orderby吗?

    【讨论】:

    • 你确定吗?该软件包绝对是一个 Angular2 模块。管道不是在 Angular 2 及更高版本中引入的吗?
    • @TarikSahni 它适用于 Angular2+ 甚至 4+ :)
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签