关于angular:为什么[class.someClass]和[ngClass]绑定与myObservable $的工作方式不同?异步?

Why do [class.someClass] and [ngClass] bindings work differently with myObservable$ | async?

我有一个元素想要应用于某个类,因此我使用了[class.active]条件,该条件正在观察Observable的变化。但是当我切换时,它不适用于以下li并破坏了整个应用程序:

<li *ngFor="let room of activeRooms$ | async" [class.active]="room.name === (currentRoomName$ | async)">

我发现,如果我改用[ngClass],则效果很好:

<li *ngFor="let room of activeRooms$ | async" [ngClass]="{ active: room.name === (currentRoomName$ | async)}">

那是为什么?谁能对此有所启发?

谢谢!


不能肯定地说,但只是几个想法,您可以检查一下:

  • 将Observable更改为EventEmitter,它们的性能略有不同;您可以在此处阅读更多信息。
  • 可观察事件可以在angularNgZone之外的某个地方生成;在这种情况下,您需要将其注入到组件中,并通过以下方式更新属性:

    zone.run(() => this.prop = newValue);

这样,angular将看到您的更改,否则将无法看到您的更改。您可以在此处了解有关区域的更多信息:另一个链接