2017-07-14 57 views
1

我是Angular2/Typescript的新手,并且一直坚持这一行将近一天。我敢肯定,这一定是简单的东西,我很想念:Angular2/Typescript:如何通过管道获取对象数组?

这是我的看法:noticias.html

<ion-list id="NewsList" no-margin> 
    <ion-item no-padding *ngFor="let item of newsData | newsfilter"> 
    ... 
    </ion-item> 
</ion-list> 

我需要过滤在此newsfilter管该列表。

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

@Pipe({ 
    name: 'newsfilter' 
}) 

export class NewsfilterPipe implements PipeTransform { 

    transform(array: any[]) {   
     console.log(array.length);   
    } 

} 

现在,当我console.log数组,我得到一个数组中有一些对象,这是我所期望的。

console.log(array)

然而,这是何等的困惑我,当我CONSOLE.LOG(array.length)我得到“undefined是不是一个对象(评估‘array.length’),我也不能访问任何按键在这些对象,如数组[0] .ID,例如。

是否有人可以解释我在做什么错在这里帮助?在此先感谢。

回答

1

您确定newsData字段不能为undefinednull

你的过滤器应该能够处理这种可能性。

transform(array: any[]) { 

    if (!array) return;  
    console.log(array.length);   
} 
0

试试这个上签名的变换方法

transform(value: any, args? any): any { 
    console.log(value.length); 
} 
0

我的同事最近也有同样的问题。您如何以及何时设定newsData的值以及此处的初始值是什么?

事情是,当视图呈现(afaik)时立即执行管道。意思是,当管道第一次执行时,newsData的值可能是不确定的,这没关系。如果我没有记错,它甚至在调用ngOnInit生命周期钩子之前执行。

添加一个if以检查现有值的管道应该是解决方案。将实际值分配给newsData后,将再次自动执行管道并且该值应该是正确的。

编辑:要检查这个,console.log('## array:', array);应该在控制台显示两次。首先用## array: undefined,然后用正确的值。

相关问题