angular - Angular .subscribe 不更新
问题描述
我正在开发一个带有 Scala 后端的 Angular Web 应用程序。我有一个复选框,当满足条件时应该自动打勾。应用程序的用户将被提示在另一个页面上输入一些信息,当他们返回时应勾选。
我println
在 scala 中添加了一个以确保该字段实际上正在更新,这是有效的。包含在.subscribe
myngOnInit()
中,但由于某种原因,它没有提取新数据。
ngOnInit(): void {
this.userService.loggedInUser().subscribe( u => {
this.user = u;
this.service.getData().subscribe( data => {
if (data) {
if (data.formCompleted) {
this.formCompleted = true;
}
}
})
});
}
我要补充一点,当用户单击另一个用户配置文件,然后单击返回到他们正在编辑的配置文件时,该框已正确勾选。所以我知道数据会回到应用程序,但不是在我需要的时候。
编辑:
所以我在浏览器的检查元素中检查了“网络”选项卡,我可以看到数据存在。我只是不明白为什么if()
没有被触发。不,这不是因为嵌套subscribe()
,因为用户必须登录才能查看此页面,并且订阅工作完美。
解决方案
这听起来像一种更具声明性、反应性的方法可能更适合您的场景。像这样的东西(没有测试,因为我没有你的方法)。
user$ = this.userService.loggedInUser();
data$ = this.user$.pipe(
switchMap(user => this.service.getData()),
tap(data => {
if (data.formCompleted) {
this.formCompleted = true;
}
})
);
ngOnInit(): void {
this.sub = this.data$.subscribe();
}
ngOnDestroy(): void {
this.sub.unsubscribe();
}
有关此技术的更多信息,请在此处查看第一次演讲:https ://www.youtube.com/watch?v=iSsch65n8Yw
推荐阅读
- javascript - 将每个元素附加到每个 div
- php - 如何摆脱 HTML 表格标签但不删除标签内的内容?
- postgresql - order by 在 POSTGRESQL 中的 partition by 子句中不起作用?
- java - java中的最大乘积子数组
- python - 根据元组填充列表中的元素选择某些元组
- mysql - 出现错误:无法通过套接字“/var/run/mysqld/mysqld.sock”连接到本地 MySQL 服务器 (2)
- javascript - 如何将带有请求参数的 API 请求链接到在另一个端口上运行的 graphql 服务器查询
- sql - 如何在spark sql中执行“存在时的情况......”
- django - 在用户计算机上下载 youtube 视频,而不是在 Django 的服务器上
- sed - 如何使用 sed 获得 match[0]