当前位置: 首页 > 知识库问答 >
问题:

在同一个Angular模板中使用异步绑定到相同的可观察两次

融泓
2023-03-14

我在组件的模板中有以下内容:

<span>
  {{(userService.CurrentUser | async)?.FullName }}
</span>

用户服务。货币用户是一个可观察的,生成用户类型的对象。用户有名为FirstName、LastName、FullName等的属性。

这个代码目前运行良好。我现在试图自定义不同屏幕大小时显示的内容。我修改了模板如下:

<!--  At screen size sm , show the user's first name  -->
<span class="d-none d-sm-inline d-md-none">
  {{(userService.CurrentUser | async)?.FirstName }}
</span>

<!--  At screen size md or larger, display user's full name  -->
<span class="d-none d-md-inline">
  {{(userService.CurrentUser | async)?.FullName }}
</span>

不幸的是,这并没有像预期的那样起作用。一个小小的实验似乎表明,两者中的任何一个

如果我绑定到组件中的一个属性,而不是使用异步管道绑定到一个可观察对象,那么我就没有这个问题。

虽然我可以通过在我的组件中订阅并维护我自己的可观测值的最新副本来跟踪可观测值的当前值,但这似乎是在重写异步管道。

我还看到在角-使用异步管在可观察

为什么我所做的事情没有达到预期效果?在使用上述两种选择之一之前,我想先了解一下。

更新:这是我正在使用设置货币用户可观察的代码。基于一个评论,我认为这是问题的根源。我怀疑这是因为我只跟踪传递给可观察构造函数的函数中的单个订阅者。我想我不明白创建一个可观察的然后通知观察者的正确方法。

export class UserService {
  private currentUser : User;
  private currentUserObservable : Observable<User>;
  private currentUserObserver : Observer<User>;

  constructor()  {
    this.currentUserObservable = new Observable<User>(
      observer => {
        this.currentUserObserver = observer;
      }
    );
  }

  get CurrentUser() : Observable<User> {
    return this.currentUserObservable;
  }

  login (emailAddress : string, password : string) : void {
    this.currentUser = new User(emailAddress, "username", "First Name", "Last Name");      
    this.currentUserObserver.next(this.currentUser);
  }
}

共有1个答案

鲜于阳
2023-03-14

它应该像现在这样工作。然而,正如留档所指出的,有几个低效之处:存储条件会导致变量(显示来自同一对象的一组属性)

你可以试试:

<ng-container *ngIf="userService.CurrentUser | async as user">

  <!--  At screen size sm , show the user's first name  -->
  <span class="d-none d-sm-inline d-md-none">
    {{ user.FirstName }}
  </span>

  <!--  At screen size md or larger, display user's full name  -->
  <span class="d-none d-md-inline">
    {{ user.FullName }}
  </span>

</ng-container>

只有一个悬念,而且干净多了。

 类似资料:
  • 我正在学习RxJava/Android(我目前正在将其与网络呼叫改造相结合),现在我有一个问题,假设我有6个不同的可观察对象,如下所示:<代码>可观察 apiInterface等为改造客户端,GetClient等为调用 现在,我如何异步执行这6个不同的调用,以及当所有6个调用都完成时-

  • 我刚开始学习angular4,遇到了一个概念上的问题。管道(在本例中与结合使用)用于订阅可观察的,而不用手动订阅。查看web上的示例: 情况1:绑定到包含单个项(如

  • 对于LiveData和MVVM架构,我完全是个新手。我想知道如何观察一个实时数据 我通过以下方式从我的房间数据库中获取实时数据: 我希望ViewModel中的另一个变量,,在列表返回空(null)时进行更新。这将用于从Visible更新片段中的ImageView。去看电视了。看得见的 我如何检查如果是空的同步? 我四处阅读,看到一些人说使用,但是架构指南明确建议不要使用ViewModel中的任何观

  • 我有一个关于在Guice中绑定的问题。 Guice不会知道我想要IMYInterface的哪个实现。我是否可以在这个阶段指定注释来有选择地说:我想要MyClass2的实现? 多谢

  • 问题内容: 我想知道如果在同一个对象上同步两次,在Java中是否会出现任何奇怪的行为? 场景如下 两种方法都使用该对象并对其进行同步。当第一个方法调用第二个方法时,它会被锁定而停止吗? 我不这么认为,因为它是同一个线程,但是我不确定是否可能会出现其他任何奇怪的结果。 问题答案: 同步块使用 可重入 锁,这意味着如果线程已经持有该锁,则它可以重新获取它而不会出现问题。因此,您的代码将按预期工作。 请