Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 为什么我要得到财产';地图';是未定义的_Angular_Typescript - Fatal编程技术网

Angular 为什么我要得到财产';地图';是未定义的

Angular 为什么我要得到财产';地图';是未定义的,angular,typescript,Angular,Typescript,我有这样的服务: 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 } fro

我有这样的服务:

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:无法读取未定义的属性“map”

我试图使用
.pipe()
,但随后得到
类型错误:无法读取未定义的属性“pipe”


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

在分配数据之前,尝试初始化
alluser
变量:

this.allUsers = [];

这是因为每次发生更改检测时都会重新评估Angular中的getter。由于
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对其进行优化,而是创建全局
用户
变量(就像您为
allUsers
所做的那样),并在
this.userService.getUsers()回调中进行映射。

以完成maryrio7应答 您正在对API进行异步调用。这意味着您的抓取可能需要很长时间。当您的呼叫正在处理时,
此.alluser
将保持
未定义状态。
这就是为什么你会犯这个错误


在第二次异步操作完成时,
this.alluser
已满,并且正在对引用执行更改检测。这就解释了为什么要将所有数据都放在表中。但是错误以前也发生过

当您定义allUsers时,最短的解决方案可能是初始化allUsers,而不是添加一行额外的内容,因此只需更改即可

allUsers: IUser[]; 


您的用户数据是未定义的。我会说您在获得订阅
userService.getUers()
的结果之前试图调用
Users()
。由于这是一个异步调用,您需要等待获取结果以填充
this.alluser
allUsers: IUser[]=[];