我有一个对象列表,我想根据特定的字符串属性对其进行过滤。

 openTasks: Task[]; //Initial list
 inProgressTasks: Task[] = []; //Filtered list

getTasks(): void {
    this.activatedRoute.paramMap.subscribe(params => {
      this.projectId = +params.get('projectId');

      if (this.projectId === 0) {
        this.taskService.getTasks().subscribe(tasks => this.openTasks = tasks); 
        // HERE I ACQUIRE LIST OF OPEN TASKS
      } else {
        this.taskService.getTaskByProjectId(this.projectId).subscribe(tasks => this.openTasks = tasks);
       // HERE I ACQUIRE LIST OF OPEN TASKS
      }

      // FILTER
      this.inProgressTasks = this.openTasks.filter(task => task.state === 'IN_PROGRESS');

    });
  }

我收到此错误:

ERROR TypeError: Cannot read property 'filter' of undefined

你能帮我解决这个错误吗?

#1楼 票数:3 已采纳

由于您获取 openTasks 的异步性质,您可能在这里遇到了问题。

在尝试过滤之前尝试等待它确定完成。

getTasks(): void {
    this.activatedRoute.paramMap.subscribe(params => {
      this.projectId = +params.get('projectId');

      if (this.projectId === 0) {
        this.taskService.getTasks().subscribe(tasks => 
            {this.openTasks = tasks},
            error => {},
            () => { this.filterTasks()}
        );         
      } 

    });
  }
filterTasks() {
    this.inProgressTasks = this.openTasks.filter(task => task.state === 'IN_PROGRESS');
}

#2楼 票数:2

this.openTasks尚未设置。 它仅在subscribethis.openTasks = tasks之后设置。 这应该有效。

this.activatedRoute.paramMap.subscribe(params => {
      this.projectId = +params.get('projectId');

      if (this.projectId === 0) {
        this.taskService.getTasks()
                  .subscribe(tasks => {
                           this.openTasks = tasks;
                           // your code that requirest openTasks
                           this.inProgressTasks = this.openTasks.filter(task => task.state === 'IN_PROGRESS');
                           });
      } else {
        this.taskService.getTaskByProjectId(this.projectId)
                        .subscribe(tasks => {
                           this.openTasks = tasks
                           // your code that requirest openTasks
                           this.inProgressTasks = this.openTasks.filter(task => task.state === 'IN_PROGRESS');
                         });
      }
    });

  ask by abc translate from so

未解决问题?本站智能推荐:

2回复

使用Angular2应用过滤器时如何构建可读的URL

我有一个网站( textnook ),用户可以在其中按作者姓名,出版商等过滤书籍。在较早应用过滤器时,我使用javascript来构建url并呈现请求,它看起来像/book/search/?author_id=1我可以使用angular 2路由使URL在传递参数时可读。 是否有可能像单页应用程
1回复

当我应用过滤器时,为什么排序在表格上不起作用?

我有数据过滤器和表头排序。 当我申请过滤器时,排序停止工作。 两者都单独工作,但一旦过滤器应用排序停止工作。 需要的帮助。 表filter.pipe.ts app.component.ts 直播: https : //angular-ivy-dubf37.stackblitz.io/
1回复

应用过滤器后,如何更新单个计数?

我想在应用过滤器后更新个人计数(适用,不适用)。 它目前只更新总数。 请协助。 直播: https : //angular-ivy-dubf37.stackblitz.io/
2回复

Typescript的过滤器中回调函数的类型是什么?

问题在这里: 打字稿说我没有指定v的类型。 这里v的类型是什么? 如何指定?
2回复

如何使用过滤器在subArrayNull值Javascript中删除Array

我想删除itineraryLinked: null从数组中删除itineraryLinked: null值。 我在下面的代码中尝试了它不起作用,请您解释一下如何从数组中删除null itineraryLinked 子数组代码中的数组从过滤器中删除null值 我想使用内部行程从数组中删除
1回复

如何在IBMCarbon(Angular)中的表格上应用搜索过滤器?

我是 IBM 碳设计系统的新手 下面是来自 IBM Carbon Angular 文档 table.component.html 的表格演示 table.component.ts 文件 我所指的文档链接: Storybook IBM Carbon table 、 Angular Carbon do
2回复

使用过滤器或管道将产品类别加载到Ionic2中的页面中?

我希望创建一个6页的Ionic 2应用程序,我不确定是否为各个类别页面使用管道或过滤器以及我需要执行此操作的代码。 每个类别页面都可以加载“applecat”类别定义的相关产品。 以下是API,通过Google表格以电子表格格式显示产品以及非常快速的主页样机构思: https://sh
1回复

具有异构类型的对象数组的搜索过滤器。在角度9中抛出错误

我想用键值对搜索对象数组。 但它在控制台中抛出错误,如图所示: core.js:5873 ERROR TypeError: obj[key].includes is not a function