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[]=[];