Angular2/Typescript:如何通过管道获取对象数组?
问题描述:
我是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.length)我得到“undefined是不是一个对象(评估‘array.length’),我也不能访问任何按键在这些对象,如数组[0] .ID,例如。
是否有人可以解释我在做什么错在这里帮助?在此先感谢。
答
您确定newsData
字段不能为undefined
或null
?
你的过滤器应该能够处理这种可能性。
transform(array: any[]) {
if (!array) return;
console.log(array.length);
}
答
试试这个上签名的变换方法
transform(value: any, args? any): any {
console.log(value.length);
}
答
我的同事最近也有同样的问题。您如何以及何时设定newsData
的值以及此处的初始值是什么?
事情是,当视图呈现(afaik)时立即执行管道。意思是,当管道第一次执行时,newsData
的值可能是不确定的,这没关系。如果我没有记错,它甚至在调用ngOnInit
生命周期钩子之前执行。
添加一个if以检查现有值的管道应该是解决方案。将实际值分配给newsData
后,将再次自动执行管道并且该值应该是正确的。
编辑:要检查这个,console.log('## array:', array);
应该在控制台显示两次。首先用## array: undefined
,然后用正确的值。