在angular7

时间:2019-03-07 08:42:39

标签: angular

我在身份验证服务中创建了一个发出用户全部数据的主题。 在标题组件中,我订阅了该可观察项。一切都应该正常工作,但不会显示任何数据。 这是auth服务中的autoAuth函数。

autoAuthUser() {
      const authInformation = this.getAuthData();
      if (!authInformation) {
        return;
      }
        this.authStatusListener.next(true);
        this.fetchUser(authInformation.userId).subscribe(
          (res) => {
            if (res.user) {
              this.currentUser = res.user;
              this.userListener.next(this.currentUser);
            }
          }
        );
      }
    }

,它在标题组件中:

this.authService.autoAuthUser();
        this.authService.getAuthStatusListener().subscribe((isA) => {
            this.isAuthenticated = isA;
            if (this.isAuthenticated) {
            this.authService.getUserListener().subscribe(
            (user) => {
                this.currentUser = user;
            }
        );
      }

这在标题组件的模板中:

<p class="username">{{currentUser?.username}}</p>

当我用控制台在标头组件中记录当前用户时,我得到了全部正确的数据,但未显示任何内容。

2 个答案:

答案 0 :(得分:0)

在标头组件中,将this.authService.autoAuthUser();调用移到底部。

这应该有效

this.authService.getUserListener().subscribe((user) => {
    this.currentUser = user;
});

this.authService.getAuthStatusListener().subscribe((isA) => {
    this.isAuthenticated = isA;
});

this.authService.autoAuthUser();

答案 1 :(得分:0)

我将按如下方式重新编写authService,但不确定是否同时需要authStatusListener和userListener。如果userLister发送 null ,则可以将身份验证状态设为false。

autoAuthUser() {
  const authInformation = this.getAuthData();
  if (!authInformation) {
    // need to set false if user not found.
    this.authStatusListener.next(false);
    this.userListener.next(null);
    return;
  }
  this.authStatusListener.next(true);
  this.fetchUser(authInformation.userId).subscribe(
    (res) => {
      if (res.user) {
        this.currentUser = res.user;
        this.userListener.next(this.currentUser);
      }
    }
  );
}

并将标头组件更改为

this.authService.autoAuthUser();
this.authService.getAuthStatusListener().subscribe((isA) => {
  this.isAuthenticated = isA;
  if (this.isAuthenticated) {
    this.authService.getUserListener().subscribe(
      (user) => {
        this.currentUser = user;
      }
    );
  }
});