2017-04-11 26 views
1

我有一个数组从JSON文件中获取数据。我可以将一组对象存储到我的Task[]中。现在我想通过状态('已提交'或'已解决'等)来检索数据。我尝试了很多方法,但无法实现。请帮帮我。angular2打字对象数组按值过滤

data: [{ 
    taskname: 'Test1', 
    taskId: '1', 
    status: 'Submitted' 
}, { 
    taskname: 'Test2', 
    taskId: '2', 
    status: 'Resolved' 
}, { 
    taskname: 'Test3', 
    taskId: '4', 
    status: 'Submitted' 
}, { 
    taskname: 'Test4', 
    taskId: '5', 
    status: 'In Progress' 
}, { 
    taskname: 'Test5', 
    taskId: '6', 
    status: 'Resolved' 
}, { 
    taskname: 'Test6', 
    taskId: '7', 
    status: 'Submitted' 
} 
}] 

Task.ts

export interface Task { 
    taskId: any; 
    taskname: any; 
    status: any; 
} 

taskService.ts

getTask() { 
    return this.http.get('../app/common/task.json') 
    .toPromise() 
    .then(res => <Task[]> res.json().data) 
    .then(data => { 
     return data; 
    }); 

} 

taskCompnent.ts

export class TaskComponent implements OnInit { 
    taskList: Task[]; 
    datasource: Task[]; 
    sortedList: Task[]; 
    ngOnInit() { 
    this.taskService.getTask().then(files => this.files = files); 
    this.vecService.getData().then(taskList => { 
     this.datasource = taskList; 
     this.taskList = this.datasource; // Storing data into my task list array 
    }); 
    } 
} 

这是我试图通过状态进行过滤:

提示以下错误:
this.sortedList = this.taskList.filter(
     task => task.status ==='Submitted'); 

示值误差:

Cannot read property 'filter' of undefined

+0

可能的复制[为什么是我的变量不变后,我修改它在函数中? - 异步代码引用](https://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) –

回答

1

这是因为承诺/ HTTP请求是异步的。您需要将承诺的回调中添加过滤器,如果将它放在外面TASKLIST是不确定的,因此过滤器无法应用的

this.vecService.getData().then(taskList => { 
     this.datasource = taskList; 
     this.taskList = this.datasource;// Storing data into my task list array 
     this.sortedList = this.taskList.filter(
     task => task.status ==='Submitted'); 

    }); 
+0

谢谢Sajeetharan,自两个小时试图承诺回调的一方。非常感谢。 – stackUser44

+0

@ stackUser44很乐意帮忙!标记为答案,如果它有帮助 – Sajeetharan