2017-04-11 30 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