angular - 当使用帮助服务访问我的 API 以检索 1 条记录时,我得到空值并且没有显示任何内容
问题描述
我正在学习 Angular 和 .Net Core,为了尝试简化我的代码,我决定使用帮助服务来保存将在多个组件中使用的 API 调用。
当我尝试检索所有记录时,它可以正常工作,但是当我尝试使用相同的过程来检索 1 条记录时,我得到控制台错误并且我正在使用的对象返回为空。
以下是我检索所有记录时的工作方法代码:
用户组件
getUsers() {
this.selectedUser = null;
this.hasSelectedUser = false;
this.helper.getUsers((data: any) => { this.users = data; });
}
助手服务
private getUsersRequest(): Observable<any> {
return this.http.get(this.baseUrl + 'users');
}
public getUsers(callback: any ) {
this.getUsersRequest().subscribe(response => {
this.users = response;
this.users.sort((a: any, b: any) => {
return a.firstName.localeCompare(b.firstName);
});
callback(this.users);
}, error => {
console.log(error);
});
}
上面的效果很好,但下面的不行:
用户组件
getDetails(userId: number) {
this.helper.getUser((data: any) => { this.selectedUser = data; }, userId);
}
用户 ID 来自网页中选择的用户。
帮手服务
private getUserRequest(id: number): Observable<any> {
return this.http.get(this.baseUrl + 'users/' + id);
}
public getUser(callback: any, id: number ) {
this.getUserRequest(id).subscribe(response => {
this.user = response;
callback(this.user);
}, error => {
console.log(error);
});
}
我可以看到,当我从帮助服务中控制台记录用户对象时,帮助服务检索数据,但似乎没有任何东西通过组件。
注意:如果我不使用帮助服务来检索单个记录,它可以正常工作,但我想尽可能使用帮助服务
解决方案
我不知道这是否可以解决您的问题,但是您应该使用 observables 而不是回调函数,所以这个
public getUser(callback: any, id: number ) {
this.getUserRequest(id).subscribe(response => {
this.user = response;
callback(this.user);
}, error => {
console.log(error);
});
}
变成这个
public getUser(id: number): Observable<any> {
return this.getUserRequest(id).pipe(
map(response => {
this.user = response;
return response;
})
);
}
和这个
getDetails(userId: number) {
this.helper.getUser((data: any) => { this.selectedUser = data; }, userId);
}
应该变成这个
getDetails(userId: number) {
this.helper.getUser(userId).subscribe((data: any) => { this.selectedUser = data});
}
推荐阅读
- python - Python - 可能的循环函数来跟踪一个人的整个时间的运动并将其与其他人分组?
- ios - 终止后再次加载 iPhone 应用程序时会调用什么函数?
- module - Odoo12 自定义模块
- python - QuerySet 获得前 x 的东西 - Django
- matlab - 有没有办法使用 max() 函数在 Matlab 中找到最多 2 个变量的函数?
- python - 使用 json 文件作为数组
- javascript - 针对 php 中的值禁用每个包的按钮
- python - How to create a new column in pandas based on a conditional that references a dictionary
- javascript - removeEventListener 没有按我的预期工作
- visual-studio - 无法使用 CMake 的 autouic 从链接库中包含 ui 文件