Angular 9 - ngSwitch 未链接

Angular 9 - ngSwitch not linked

我得到了一个表格,该表格应该根据我在下拉列表中选择的大小写进行更改:

入住的房间类型:简单、双人间或三人间。

但是,尽管我读到有关 ngSwitch 的信息以显示 DOM(一种简单形式),但我无法 link 2(类型和 ngSwitch)

根据我在网上找到的逻辑,我把我的HTML代码和开关的条件放在我的component.ts模板中(它在一个单独的HTML文件中一开始但都不起作用)。

@Component({
  selector: 'app-revenue',
  // templateUrl: './revenue.component.html',
  template: `

    <div [ngSwitch]="types.value">
      <div *ngSwitchDefault="''">
        <p>Essai Espace</p>

          <div>
      <form [formGroup]="revenueForm" (ngSubmit)="revenueManager()">

          <div class="form-group">
          <select name="types" id="types" ngModel="types"  class="form-control"  formControlName="types">
            <option *ngFor="let type of types" [ngValue]="type.value">
              {{type.viewValue}}
            </option>
          </select>
          </div>
      </form>
          <pre>{{revenueForm.value | json }}</pre>
        </div>
      </div>

      <div *ngSwitchCase="'roomsSimples'">
        <p>Essai Espace</p>

        <form [formGroup]="revenueForm" (ngSubmit)="revenueManager()">

        <div class="form-group">
            <label>Rooms Simples</label>
            <input type="text" class="form-control" formControlName="roomsSimples">
          </div>

          <button type="submit" class="btn btn-primary">OK</button>

        <div>

          <div class="form-group">
            <select name="types" id="types" ngModel="types"  class="form-control"  formControlName="types">
              <option *ngFor="let type of types" [ngValue]="type.value">
                {{type.viewValue}}
              </option>
            </select>
          </div>
        </div>
        </form>
        <pre>
    {{revenueForm.value | json }}
    </pre>
      </div>
  `,

  styleUrls: ['./revenue.component.sass']
})

我在 class 中声明了以下类型:

export class RevenueComponent implements OnInit {
  revenueForm: FormGroup;

  // doubles = value.roomsDoubles;
  header = "Outils Revenus";

  //Pour les rooms
  types = [
    {value: 'roomsSimples', viewValue: 'Rooms Simples'},
    {value: 'roomsDoubles', viewValue: 'Rooms Doubles'},
  ];
  // type = this.types.values();

  constructor(private fb: FormBuilder) {
  }

  ngOnInit(): void {
    this.revenueForm = this.fb.group({
      roomsDoubles: [],
      roomsDoublesEnfant: [],
      roomsTriples: [],
      roomsAppartement: [],
      types: [],
    })
  }

  revenueManager() {
    console.log('Données du formulaire...', this.revenueForm.value);
  }
}

虽然类型的值出现在我的渲染中,但 DOM 的修改没有出现。 你能指导我走上正确的轨道吗? 谢谢

[ngSwitch]="types.value" types 中是一个 Array 而不是 Object,所以 types.value 将不起作用 types 只能通过索引访问,例如 types[0].value

从你的代码来看,你试图实现的目标并不是很清楚,但看起来你在组织组件的方式上存在一些逻辑问题,而不仅仅是使用 ngSwitch。

根据我的理解,这是一个使用 ngSwitch 的示例。

component.ts

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  selectedRoomType: any;
  types = [
    {value: 'roomsSimples', viewValue: 'Rooms Simples'},
    {value: 'roomsDoubles', viewValue: 'Rooms Doubles'},
  ];
}

component.html

<!-- Dropdown to select the room type -->
<mat-form-field appearance="fill">
  <mat-label>Room Types</mat-label>

  <!-- Bind the selection to selectedRoomType -->
  <mat-select [(value)]="selectedRoomType" >
    <mat-option *ngFor="let type of types" [value]="type.value">
      {{type.viewValue}}
    </mat-option>
  </mat-select>
</mat-form-field>

<!-- Switch Depending on the type -->
<div [ngSwitch]="selectedRoomType">

  <!-- If type is roomsSimples -->
  <div *ngSwitchCase="'roomsSimples'">
    <strong> Rooms Simple Form </strong>
  </div>

  <!-- If type is roomsDoubles -->
  <div *ngSwitchCase="'roomsDoubles'">
    <strong> Rooms Doubles Form </strong>
  </div>

  <!-- Any other value (including undefined) -->
  <div *ngSwitchDefault>
    <strong> Select a Room Type </strong>
  </div>

</div>

这是一个有效的 stackblitz https://stackblitz.com/edit/angular-ivy-6uwuux 请务必查看 angular 文档 https://angular.io/api/common/NgSwitch

此外,我建议为您的类型使用枚举,这样可以更轻松地重构您的代码,以防将来您的类型值发生变化。