html - Angular - 从 GraphQL 返回数据
问题描述
所以,我在使用 Angular 时遇到了问题。我需要将一些用户数据存储在 graphcool 中,这样我就可以使用名称(字符串)和余额(数字),但它仅在我调用HTML 时才有效,userName
而userBalance
不是在 TS 中,这是我的 TS 组件:
public userName: Observable<string>;
public userBalance: Observable<number>;
public getUserById: string;
constructor(
private activatedRoute: ActivatedRoute,
private userService: UserService
) {
this.getUserId = this.activatedRoute.snapshot.params['userId'];
this.userName = this.userService.getUserById(this.getUserId)
.pipe(map(res => res[0].name));
this.userBalance = this.userService.getUserById(this.getUserId)
.pipe(map(res => res[0].balance));
}
这是getUserById()
UserService.ts 中的方法:
getUserById(userId: string): Observable<User[]> {
return apollo
.query<AllUsersQuery>({
query: SINGLE_USER_QUERY,
variables: {
userId
}
}).pipe(
map(res => res.data.allUsers)
);
}
每当我尝试打印userName
并userBalance
进入控制台时,它都会返回一个Observable
而不是一个字符串和一个数字。但是,在 HTML 中,这很好用:
<div>Name:
<p>{{ userName | async }}</p>
</div>
<div>Balance:
<p>$ {{ userBalance | async }}</p>
</div>
我想这与异步有关。如何将与我在 HTML 中获得的相同值返回到我的 TS 背景?
我认为指出我尝试使用.subscribe
而不是也很重要.map
,我可以在控制台上看到实际值,但是,在订阅之外,这些值没有显示。
感谢您的关注!
解决方案
正如 Daniel W Strimpel 所提到的,您使用的变量确实是可观察的,并且异步管道正在处理订阅并显示显示值。如果您需要这些价值,您可以通过这两种方式中的任何一种进行。
正如 Benjamin Kindle 所建议的,在 userName 订阅中使用不同的变量。
this.userName.subscribe(name=>this.userNameValue = name)
直接从 observable 访问它的值
this.userName.value
希望有帮助!
推荐阅读
- reactjs - 如何在 React 中创建一个结构来防止一个动作在完成之前传递给另一个动作?
- google-analytics - PowerBI:如何在 PowerBI 的表中显示和消失列
- java - 使用邮递员登录 Keycloak 领域
- powerbi - 如何在 Power BI 中获得以下 100% 堆叠条形图
- python - Python/numpy:捕获 IEEE-754 “不精确”异常
- ansible - “强制转换为 Unicode:需要字符串或缓冲区,找到列表”执行 Ansible-Playbook 时出错
- php - 尝试在 Laravel 中使用 JWTAuth 创建用户时出错
- javascript - React Native null 不是对象(评估'NativeBeaconBroadcast.checkTransmissionSupported')
- node.js - 使用 mongoose 和 NodeJS 在 Mongo DB 中嵌套查询
- javascript - React Native,无效的 Prop 源