如何在角度2中过滤json数组?

时间:2017-01-24 11:31:26

标签: angular

我是角度2的新开发者,我真的遇到了困难......

我有一个简单的json对象数组,我想根据某些值过滤搜索元素。例如,我有这个数组:

invoiceList = 
  [
    {
      invoiceNumber: 1234, 
      invoiceSupplier: "test", 
      invoiceStatus: "Import error", 
      invoiceCategory: "invoice with GR", 
      date: "22/01/2017", 
      amount : 134527
    },
     //others elemenys...
  ];

我想过滤依赖于名称和状态以及数量的元素。 我知道在Angular 1中我们可以使用过滤器,它对我来说更容易和更清晰,但是我看到它们在Angular2中被移除了,我真的非常喜欢它们引入的管道。

请告诉我如何在.ts部分和.html部分中过滤该数组?因为我觉得我真的被封锁了......

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以在角度2中使用管道,例如

import {Pipe, PipeTransform} from '@angular/core';
@Pipe({
    name: 'isInRole',
    pure: false
})
export class IsInRole implements PipeTransform {
    transform(roles: string[], roleName: string): boolean {
        let filteredRoles = roles.filter(p => p.indexOf(roleName) !== -1);
        if (filteredRoles.length > 0)
            return true;
        return false;
    }
}

在app.module.ts中,将其注册为

import {IsInRole} from './pipes/isinrole.pipe';

@NgModule({
    imports: [BrowserModule, FormsModule, HttpModule],
    declarations: [IsInRole],
    bootstrap: [AppComponent]
})
export class AppModule { }

然后在模板中使用它

<div class="col-md-6" *ngIf="(roles | isInRole: 'Administrator')">
    ...
</div>