2017-07-14 94 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,然後用正確的值。

相關問題