angular - Angular 服务未在功能中更新
问题描述
编辑:对不起大家,我当然首先用谷歌搜索,但找不到令人满意的答案。谢谢大家的快速帮助。
简短的问题:我有一个 Angular 组件,它从提交的值中按下按钮时从服务器获取数据。此数据应通过服务传递到下一个组件。然而,这似乎并不同步工作。如果我按下添加按钮 console.log(this.jsonData) 什么也不输出。当我第二次按下它时,会显示来自服务器的正确数据。
这一定与 Angular 有关,但我不知道为什么会发生这种情况。我希望有人经历过类似的事情并可以提供帮助。谢谢!
HTML:
<form>
<input #userName type="text" required>
<input #seqNumber type="number" min="1" max="70">
</form>
<button (click)="add(userName.value, seqNumber.value);">
add
</button>
组件.ts
add(name: string, seqNum: string): void {
this.inputUser = name;
this.seqNumber = seqNum;
this.loginService.getSequence(name, seqNum)
.subscribe(data => this.jsonData = data);
console.log(this.jsonData);
}
和 service.ts
// fetches sequence from server
getSequence(userId: string, sessionNum: string): any {
const options = {
params: new HttpParams()
.set('userId', userId)
.set('sessionNum', sessionNum)};
const sequence = this.http.get<Sequence[]>(this.loginUrl, options);
return sequence;
}
解决方案
数据是异步分配的。该this.jsonData
变量在被访问时仍未定义。任何直接依赖于的语句this.jsonData
都应该在订阅中。
this.loginService.getSequence(name, seqNum).subscribe(
data => {
this.jsonData = data;
console.log(this.jsonData);
},
error => {
// always good practice to handle HTTP erros
}
);
有关如何在此处访问异步数据的更多信息。
推荐阅读
- javascript - Telegram html5 游戏返回空白页
- android - 如何在构建并包含为“aar”的 android 应用程序和颤振模块之间进行通信?
- java - 与 Python 在完全相同的代码上相比,Java 超出了时间限制
- python - 根据python中的值溶解多边形
- sql - SQL 两位小数
- google-cloud-platform - 重新启动后无法将远程桌面连接到 Windows 服务器
- python - 在多线程 Python 函数上使用 FastAPI 流式传输视频
- reactjs - 如何将参数传递给子组件
- javascript - Node.js vercel/pkg express 'return 0 error' 和 fastify 错误。错误:编译阶段文件或文件夹未包含在可执行文件中
- sql-server - sqlpackage.exe 发布失败,没有错误