【问题标题】:Angular (6) form choose selected item in select after http getAngular(6)表单在http get后select中选择所选项目
【发布时间】:2026-01-14 05:20:04
【问题描述】:

我想在表单选择中选择一个选项,但我没有找到方法。

我在网络上检查了许多类似的问题,但没有找到一种方法使解决方案适应我的代码。

这里是视图:

        <select class="form-control" #selectedValue name="selectedSalles" 
                id="selectedSalles" [(ngModel)]="selectedSalle" 
                (ngModelChange)="addSalleToSelected($event)">
          <option *ngFor="let salle of allSalleEtb | async" 
                [ngValue]="salle" [value]="selectedSalle" >
            {{salle.nom}}
          </option>
        </select>

使用此代码,列表allSalleEtb 的第一项被选中,但它应该是另一个

如果我不使用此 `[value]="selectedSalle",则不会选择任何内容并且选择为空白

我从以下位置获得“salle”对象:

public getSlot(){
  this.creneauService.getSlot(this.idEtablissement, this.idCreneau)
    .subscribe((data: CourseSlot) => {
      this.selectedSalle = data.salle;
    }
  );
}

更多信息:

对象“salle”包含“nom”和“id”属性:

salle:Object {idSalle: 2, nom: "110A"}

控制器从 httpClient 获取请求接收信息:

getSlot(idEtablissement: number, idCreneau: number){
  const url =  environment.API_URL + "/etablissement/" + idEtablissement + "/creneaux/" + idCreneau;
  return  this.httpClient.get(environment.API_URL + "/etablissement/" + idEtablissement + "/creneaux/" + idCreneau);
}

非常感谢您的帮助!!

-----------已编辑

当我更改“salle”(ngModelChange)="addSalleToSelected($event)" 的值时,SelectedSalle 被编辑,并用于发布表单:

addSalleToSelected(salle){ 
  this.salle = salle;
  this.selectedSalle = salle;
  console.log("salle added"); 
  console.log(salle);
}

在我所有的试探中,我忘记并删除了需要的选项中的[ngValue]="salle",所以我把它放回去了。

【问题讨论】:

  • selectedSalle 是否指的是在allSallEtb 列表中找到的salle 实例?还是它是一个单独的实例,包含与列表中的一项相同的值?
  • 您总是设置[value] = selectedSalle,这意味着所有选项的值相同。
  • @ConnorsFan selectedSalle 是所选项目的值。我已经编辑了我的帖子以显示该方法。 @Amit-Chigadabi 我使用 [value] 尝试选择该项目,但它不起作用。我已将 [ngValue]="salle" 放回原处,但我误删了它,但这是必需的。
  • 只需使用[value]="salle" 并从选项元素中删除[ngvalue] 属性。因为选定的值将设置为ngModel 变量selectedSalle
  • 我发现了一个我没有发现的问题。当我加载包含要编辑的信息的页面时,“salle”是一个正确的对象。 如果我改变“salle”的值,它就会变成“[object Object]”,不再是真实的对象了。。我已删除 [ngvalue]。

标签: angular select


【解决方案1】:

HTML 在选项值而不是完整对象中分配id

<select class="form-control" #selectedValue name="selectedSalles" 
        id="selectedSalles" [(ngModel)]="selectedSalle" 
        (ngModelChange)="addSalleToSelected($event)">
    <option *ngFor="let salle of allSalleEtb" [value]="salle.idSalle"> //==== assign id in value rather than complete object
        {{salle.nom}}
    </option>
</select>

TS

public getSlot(){
    this.creneauService.getSlot(this.idEtablissement, this.idCreneau)
            .subscribe((data: CourseSlot) => {
                this.allSalleEtb = data.salle; // set all data here
                this.selectedSalle = this.allSalleEtb[0].idSalle; // set first as selected
            });
}

根据id查找选中的对象

addSalleToSelected(value){ 
    this.salle = this.allSalleEtb.find(salle => salle.idSalle == value); // find selected object by finding in original data by ID
}

工作DEMO

【讨论】:

  • 非常感谢(即使我不应该写它)。我解决了无法选择的“销售”列表中的主要问题。解决了。然后添加你的代码就像是美妙的草莓!
最近更新 更多