我正在开发一个具有Scala后端的Angular web应用程序。我有一个复选框,当满足某个条件时,它会自动勾选。应用程序的用户将被提示在另一个页面上输入一些信息,当他们返回时,它应该被勾选。
我已经向scala添加了一个println,以确保字段实际上正在更新,这是有效的。.subscribe包含在我的ngOnInit()中,但是由于某些原因,它没有提取新数据。
ngOnInit(): void {
this.userService.loggedInUser().subscribe( u => {
this.user = u;
this.service.getData().subscribe( data => {
if (data) {
if (data.formCompleted) {
this.formCompleted = true;
}
}
})
});
}我要补充的是,当用户单击另一个用户配置文件,然后单击回他们正在编辑的配置文件时,该框是正确勾选的。因此,我知道数据会返回到应用程序中,但不是在我需要的时候。
编辑:
因此,我在浏览器上检查了Inspect元素中的'Network‘选项卡,可以看到数据是存在的。我就是不明白为什么if()没有被触发。不,这并不是因为嵌套的subscribe(),因为用户必须登录才能查看此页面,并且订阅工作正常。
发布于 2021-07-16 01:07:03
这听起来像是一种更具声明性的、反应式的方法,可能更适合您的场景。像这样的东西(没有测试,因为我没有你的方法)。
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
https://stackoverflow.com/questions/68394743
复制相似问题