为什么我得到财产“地图”是未定义(Why do I get property 'map

2019-10-28 13:47发布

我有这样的服务:

public getUsers() {
  return this.httpClient.get(environment.BASE_URL + `api/all`);
}

而在组件,我设置了用户对NGX的自举表

import { Component, OnInit, PipeTransform } from "@angular/core";
import { UserService } from "./service.service";
import { IUser } from "./users.model";
import { Observable } from "rxjs";
import { map } from "rxjs/operators";

@Component({
  selector: "app-users",
  templateUrl: "./users.component.html",
  styleUrls: ["./users.component.css"]
})
export class UsersComponent implements OnInit {
  allUsers: IUser[];
  page = 1;
  pageSize = 4;
  collectionSize: any;
  constructor(private userService: UserService) {}

  ngOnInit() {
    this.userService.getUsers().subscribe((data: any[]) => {
      this.collectionSize = data.length;
      this.allUsers = data;
    });
  }
  get users(): IUser[] {
    // tslint:disable-next-line:max-line-length
    return this.allUsers.map((user, i) => ({ id: i + 1, ...user 
    })).slice((this.page - 1) * this.pageSize, (this.page - 1) * this.pageSize 
    + this.pageSize);
  }
}

我总是得到错误TypeError: Cannot read property 'map' of undefined

我试图用.pipe()但后来我得到TypeError: Cannot read property 'pipe' of undefined

在我的DOM我拿到表中的所有数据,但只有我在控制台此错误。

Answer 1:

而不是增加一个额外的行最短的解决方案,这可以初始化allUsers当你定义它们如此简单变化

allUsers: IUser[]; 

allUsers: IUser[]=[];


Answer 2:

这是因为在角干将被重新评估每一个变化检测发生的时间。 作为allUsers是异步填充,则当它不确定的一段时间。 这就是为什么你得到这个错误。

一个可能的解决方案是初始化allUsers作为一个空数组所以它永远不会是未定义的。

this.allUsers = [];

请记住,这个代码将运行每次变化检测发生时间:

return this.allUsers.map((user, i) => ({ id: i + 1, ...user 
 })).slice((this.page - 1) * this.pageSize, (this.page - 1) * this.pageSize 
+ this.pageSize);
}

你真的需要它这样运行? 这样每一次变化检测发生的映射。 如果没有,您可以通过不使用的getter优化它users ,而是创建全局users变量(像你这样的allUsers ),做内部的映射this.userService.getUsers()回调。



Answer 3:

要完成maryrio7答案

您正在为您的API的异步调用。 这意味着,你可以取需要很长的时间。 当你的呼叫处理, this.allUsers仍然是undefined 。 这就是为什么你得到这个错误。

在第二个的时候,当你的异步操作完成, this.allUsers已满,在基准变化检测正在执行。 这也解释了为什么你在表中的所有数据。 但错误也发生之前。



Answer 4:

尝试初始化allUsers分配数据之前变量:

this.allUsers = [];


文章来源: Why do I get property 'map' is undefined