我有一个 Select 输入,其中有一个ngFor循环,用于创建基于 colored颜色 数组的选项.

我需要的行为是自动 Select 第一个选项和to,以便当输入被创建/更改时,角react 形式可以获得它的值.

到目前为止,我的表格看起来是这样的:

<form [formGroup]="stepOneForm">
  <label for="modelSelect">Model:</label>
  <select id="modelSelect" formControlName="model">
    <option value="" selected>Choose...</option>
    <option *ngFor="let model of models" [value]="model.code">
      {{ model.description }}
    </option>
  </select>

  <!-- The input i am interested in -->
  <ng-container *ngIf="stepOneForm.get('model')?.value as code">
    <label for="colorSelect">Color:</label>
    <select id="colorSelect" formControlName="color" (change)="onColorSelected()" [value]="colors[0].code">
      <option *ngFor="let color of colors" [value]="color.code">
        {{ color.description }}
      </option>
    </select>
    <img [src]="imagePath" alt="car">
  </ng-container>
</form>

我的TS部分看起来是这样的:

ngOnInit() {
    this.carService.getModels().subscribe(models => {
      this.models = models;
    });

    this.stepOneForm.valueChanges.subscribe(() => {
      this.carService.updateStepOneValidity(this.stepOneForm.valid);
      const model = this.stepOneForm.get('model')?.value
      this.colors = this.models.find(modelObj => modelObj.code === model)?.colors ?? [];
      
      Console.log(this.stepOneForm.get(‘color’)?.value) // This returns '' (empty string)
      
      if (model) {
        this.carService.updateShoppingCart(this.stepOneForm.value)
      }
    })
  }

当ng—container内容被显示时,订阅被触发,在 colored颜色 输入中,我看到默认 Select 的 colored颜色 ,但在这一行中,我得到了一个空字符串,而我应该得到这个选项的值:

Console.log(this.stepOneForm.get(‘color’)?.value)

推荐答案

它只是更新视图,但是要在更新model表单控件时以编程方式更新color表单控件值,必须使用组件中的表单方法,使用.setValue/.patchValue.

因此,您可以向第一个SELECT添加一个侦听器,然后更新color个表单控件.

<select id="modelSelect" formControlName="model" (change)="onModelSelected()">
  onModelSelected() {
    this.stepOneForm.get('color').setValue(this.colors[0]?.code || '');
  }

你可以通过添加{emitEvent: false}来从现有的valueChanges中实现,以防止无限循环,但 colored颜色 Select 将无法工作,所以你需要从第一次 Select 开始,即你需要额外的侦听器.

Typescript相关问答推荐

为什么缩小封闭内部不适用于属性对象,但适用于声明的变量?

如何为ViewContainerRef加载的Angular组件实现CanDeactivate保护?

TypeScrip:逐个 case Select 退出noUncheck kedIndexedAccess

为什么我的条件类型不能像我预期的那样工作?

如何在react组件中使用doctype和html标签?

CDK从可选的Lambda角色属性承担角色/复合主体中没有非空断言

如何将定义模型(在Vue 3.4中)用于输入以外的其他用途

为什么Typescript不能推断类型?

声明文件中的类型继承

在React中定义props 的不同方式.FunctionalComponent

Angular NG8001错误.组件只能在一个页面上工作,而不是在她的页面上工作

如何在Deno中获取Base64图像的宽/高?

我可以将一个类型数组映射到TypeScrip中的另一个类型数组吗?

替换typescript错误;X类型的表达式可以';t用于索引类型Y;带有未定义

Typescript 和 Rust 中跨平台的位移数字不一致

Angular另一个组件的nativeelement未定义

我可以在 Typescript 中重用函数声明吗?

对于通过 Axios 获取的数据数组,属性map在类型never上不存在

有没有办法将类型与关键更改相匹配?

从接口推断模板参数?