"Cannot read properties of undefined (reading 'id')" 在 Angular 中加载页面时出错
"Cannot read properties of undefined (reading 'id')" error when loading page in Angular
我正在从 angular 中的 mockapi 服务中提取数据。我毫无问题地提取了所有数据,然后尝试使用列表中任何数据的 ID 访问数据的详细信息。我想我想要所有数据的函数稍后运行,我得到这个错误。
app.component.ts 文件
export class AppComponent implements OnInit {
data:Array<any>
userData!: User;
constructor(private task: TaskService) {
this.data = new Array<any>();
}
ngOnInit(): void {
this.runTask();
}
runTask() {
this.task.getData().subscribe((data) =>{
this.data = data;
});
}
getUserData = (id: number) => {
if (this.runTask == null) {
return
}
this.task.getUserData(id).subscribe((res: User) => {
console.log(res);
this.userData = res;
})
}
}
export interface User{
id: number,
name: string,
phone: number,
website: string,
company: any
}
task.service 文件
export class TaskService {
readonly URL;
constructor(private http: HttpClient) {
this.URL = "https://jsonplaceholder.typicode.com/users/"
}
getData(): Observable<any> {
return this.http.get(this.URL);
}
getUserData(id: any) {
return this.http.get<User>(this.URL+id.id);
}
}
截图
first load
当我点击查看按钮的时候,我想要的id里面的数据就来了。打开模态,当我关闭模态时,所有数据都已收到。
我已经研究这个问题几个小时了,但找不到解决方案。
id 是组件中的一个数字,但它在服务中用作对象。如下更新您的服务
getUserData(id: number) {
return this.http.get<User>(this.URL + id);
}
您遇到的错误(我在屏幕截图中看到的)来自您的模板文件 'app.component.html' 第 90 行。
您似乎正在尝试从未定义的变量(尚未加载的变量(尚未))中读取 id。
确保它已定义,例如,您可以使用 'NgIf' 测试变量是否为真,如下所示:
<div *ngIf="user">
<span>{{user.id}}</span>
<span>{{user.name}}</span>
</div>
为避免传递给方法的类型错误(如),尽量不要使用'any'关键字。
我正在从 angular 中的 mockapi 服务中提取数据。我毫无问题地提取了所有数据,然后尝试使用列表中任何数据的 ID 访问数据的详细信息。我想我想要所有数据的函数稍后运行,我得到这个错误。
app.component.ts 文件
export class AppComponent implements OnInit {
data:Array<any>
userData!: User;
constructor(private task: TaskService) {
this.data = new Array<any>();
}
ngOnInit(): void {
this.runTask();
}
runTask() {
this.task.getData().subscribe((data) =>{
this.data = data;
});
}
getUserData = (id: number) => {
if (this.runTask == null) {
return
}
this.task.getUserData(id).subscribe((res: User) => {
console.log(res);
this.userData = res;
})
}
}
export interface User{
id: number,
name: string,
phone: number,
website: string,
company: any
}
task.service 文件
export class TaskService {
readonly URL;
constructor(private http: HttpClient) {
this.URL = "https://jsonplaceholder.typicode.com/users/"
}
getData(): Observable<any> {
return this.http.get(this.URL);
}
getUserData(id: any) {
return this.http.get<User>(this.URL+id.id);
}
}
截图
first load
当我点击查看按钮的时候,我想要的id里面的数据就来了。打开模态,当我关闭模态时,所有数据都已收到。
我已经研究这个问题几个小时了,但找不到解决方案。
id 是组件中的一个数字,但它在服务中用作对象。如下更新您的服务
getUserData(id: number) {
return this.http.get<User>(this.URL + id);
}
您遇到的错误(我在屏幕截图中看到的)来自您的模板文件 'app.component.html' 第 90 行。 您似乎正在尝试从未定义的变量(尚未加载的变量(尚未))中读取 id。
确保它已定义,例如,您可以使用 'NgIf' 测试变量是否为真,如下所示:
<div *ngIf="user">
<span>{{user.id}}</span>
<span>{{user.name}}</span>
</div>
为避免传递给方法的类型错误(如