You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中Datalist选中值显示[object Object]问题解决

解决Angular表单选中学生后输入框显示[object Object]的问题

问题场景

Angular项目中,通过FormArray实现学生选择表单功能,整体逻辑正常,但选中学生后输入框会显示[object Object],且需要表单最终存储完整的Student对象(从数据库获取)。

原表单代码

<div formArrayName="studentPublishing" *ngFor="let all of getstudentPublishing().controls;  index as i">
    <div class="form-group data">
        <input type="text" list="options" class="form-control" placeholder="Students" (change)="getAuthor($event,i)" [formControlName]="i" required>

        <datalist id="options">
        <option *ngFor="let c of dataStudent" [value]="c.name">{{ c.name }}</option>
        </datalist>

        <div class="rem"><button (click)="removeAuthor(i)">-</button></div>

        <div *ngIf="!formPublic.get('studentPublishing')?.valid && formPublic.get('studentPublishing')?.touched" class="validation-error">
            <p>Authors are mandatory</p>
        </div>

    </div>
</div>
<div id="add" class="add"><button type="button" (click)="addAuthor()">Author +</button></div>

原TypeScript处理函数

getAuthor(e: any, id:number){
    const studentName = e.target.value;
    const studentSelected = this.dataStudent.find(x => x.name === studentName);
    if (studentSelected) {
      this.getstudentPublishing().at(id).setValue(studentSelected);
    }
}

尝试过的无效方案

  • 使用ngValue绑定选项值,输入框仍显示[object Object]
  • 使用json管道转换值,未解决显示异常问题
  • 将选项值设为学生名称字符串,只能保存名称而非完整Student对象

最终解决代码

参考Daniel Gimenez的方案,在表单提交或需要同步值时执行以下代码:

this.formPublic.updateValueAndValidity();
if(this.formPublic.valid){
  const studentControls = this.getstudentPublishing().controls;
  const students = studentControls.map(y => {
    const name = y.value;
    console.log(name);
    return this.dataStudent.find(student => student.name === name);
  });

  for (let i = 0; i < students.length; i++) {
    this.getstudentPublishing().at(i).setValue(students[i]);
    console.log(students[i]?.name);
  }
}

内容的提问来源于stack exchange,提问作者lys_18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:22:53