【问题标题】:angular2 typescript array of object filter by valueangular2 typescript对象数组按值过滤
【发布时间】:2017-09-06 08:47:42
【问题描述】:

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

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'
}
}]

任务.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');

在错误下方显示错误:

无法读取未定义的属性“过滤器”

【问题讨论】:

标签: json angular typescript


【解决方案1】:

这是因为 Promise / HTTP 请求是异步的。您需要在 Promise 的回调中添加过滤器,如果将其放在 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');

    });

【讨论】:

  • 感谢 Sajeetharan,因为尝试了两个小时的承诺回调。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2018-11-12
  • 2023-02-06
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
相关资源
最近更新 更多