2016-11-14 38 views
0

我有一个JSON数组,我遍历在NGfor循环中显示数据,然后我想在加载后应用过滤器来优化结果。数据是异步加载的。到目前为止,这工作,但我的管道过滤器只是返回不能读取未定义的属性。我究竟做错了什么?我已经简化了组件,不包括获取数据的http请求,以及管道语句中的返回逻辑。异步管道过滤ng for Loop Angular 2

// component 
import { Observable } from 'rxjs/Rx'; 
currentData:any = httpRequest; // Simplified 



// html 
<div *ngFor="let item of currentData | async | datePipe; let i = index"> 
//display content 
</div> 


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

@Pipe({ 
    name: 'datePipe' 
}) 
export class DatePipe implements PipeTransform { 

    transform(time:any []): any[] { 
    console.log(time); 
    return time.filter(it => it["createDt"] != -1); // Simplified 

    } 

} 

*更新修复*

// html 
    <div *ngIf="currentData?.length > 0"> 
     <div *ngFor="let item of currentData | datePipe; let i = index"> 
     //display content 
     </div> 
    </div> 

    //pipe 
    transform(time:any): any { 
    for(let key of time){ 
     console.log(key.somevalue); 
    } 
    } 
+1

我有一个类似的问题装载异步数据,而与管道。有人建议我的解决方案是用* ngIf currentData包围* ngFor。像这样:'

//display content
' – OvSleep

+2

我会建议基本上与@OvSleep相同的东西,在'* ngIf'中稍作修改,它应该是'* ngIf =“currentData?.length> 0”'。 – developer033

+0

谢谢你们,这是正确的。查看我最终解决方案的修改后的答案 – Paddy

回答

1
// html 
    <div *ngIf="currentData?.length > 0"> 
     <div *ngFor="let item of currentData | datePipe; let i = index"> 
     //display content 
     </div> 
    </div> 

    //pipe 
    transform(time:any): any { 
    for(let key of time){ 
     console.log(key.somevalue); 
    } 
    }