Angular select 基于某些值的可见元素

Angular select visible element based on some value

我从服务中获取项目列表作为(可观察的)数组。中的元素有一个 type: string; 字段,我打算将其用作要显示的 selecting 不同组件的指示符。当我还没有类型的小部件时,我想将该类型显示为字符串。

版本

当我忘记什么的时候,让我知道,我会添加它。

module version
node v14.2.0
Angular CLI 9.1.6
npm 6.14.4
@angular/core ~9.1.7

到目前为止我得到了什么

我正在使用的组件模板

<mat-grid-list cols="8" rowHeight="1:1" class="grid">
  <ng-container *ngFor="let widget of widgets |async">
    <mat-grid-tile class="grid-item">
      <div [ngSwitch]="widget.type">
        <app-light-toggle [widget]="widget" *ngSwitchWhen="light"></app-light-toggle>
        <div *ngSwitchDefault>
          {{widget.type}}
        </div>
      </div>
    </mat-grid-tile>
  </ng-container>
</mat-grid-list>

具有以下字段的小部件 class:

export class Widget {
  // other fields left out, because irrelevant.
  type: string;

  constructor(type :string) {
    this.type = type;
  }
}

我所期待的

然后 type 值等于 light select 第一种情况,这将显示 light 的小部件。当 type 等于任何其他值时,在 tile

中显示 type 变量

我得到了什么

备注

更新

  1. 我在 ngSwitchWhen 之前添加了一个星号,我认为它修复了模板错误。但我仍然得到错误的选项 selected.
  2. 我发现,这两个元素在彼此之上呈现。
  3. 添加了 angular 版本
  4. 已添加解决方案
  5. 将解决方案移至 stackblitz

解决方案

@Poul Kruijt 在 answer did it for me. I was using the wrong directive and did not use quotes in the value. A simplified stackbliz version can be found here

中提供的解决方案

首先,它被称为ngSwitchCase。其次,您应该在 *ngSwitchCase 赋值周围加上引号,否则它将查找名为 light:

的组件变量
*ngSwitchCase="'light'"