首页 > 解决方案 > Angular .subscribe 不更新

问题描述

我正在开发一个带有 Scala 后端的 Angular Web 应用程序。我有一个复选框,当满足条件时应该自动打勾。应用程序的用户将被提示在另一个页面上输入一些信息,当他们返回时应勾选。

println在 scala 中添加了一个以确保该字段实际上正在更新,这是有效的。包含在.subscribemyngOnInit()中,但由于某种原因,它没有提取新数据。

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(),因为用户必须登录才能查看此页面,并且订阅工作完美。

标签: angulartypescriptscalarxjssubscribe

解决方案


这听起来像一种更具声明性、反应性的方法可能更适合您的场景。像这样的东西(没有测试,因为我没有你的方法)。

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


推荐阅读