html - Angular 和 Typescript 中带有选择选项的数组
问题描述
我在一个页面上显示 51 个问题及其相关答案。这两个信息都来自一个网络服务调用。
<tbody>
<tr *ngFor="let QuestionOption of questions; trackBy: trackQuestionById; let i = index;">
<th scope="row">{{QuestionOption.id}}</th>
<td>{{QuestionOption.name}} {{QuestionOption.description}}
</p>
<select class="form-control" name="selectAnswer" [(ngModel)]="answer[i]">
<option *ngFor="let answers of QuestionOption.Answers" [ngValue]="answers.id">{{answers.description}}</option>
</p>
</td>
</tr>
</tbody>
在打字稿代码上,我尝试以下操作:
answer: Answer[];
this.answer = new Array<Answer>();
Answer 类型有多个字段,例如:Id、Name、Score、Description
不起作用的是我总是将 ID 放入 answer[i] 但我想在字段 answer[i].id 中有 ID
如果我改变
[(ngModel)]="answer[i]"
进入
[(ngModel)]="answer[i].id"
我收到以下异常:错误类型错误:“_co.caaAnswer[_v.context.index] 未定义”
我也试过:
[(ngModel)]="answer[i]?.id"
那么使用 answer[i] 是否正确?然后在选项中我应该以某种方式将所选值分配给 answer[i].id 。如果是这样,有人可以帮助如何做到这一点。
任何帮助表示赞赏!非常感谢。奥热雷斯
解决方案
我找到了解决方案。问题是由于 Array.compareWith 函数无法正常工作。它仅在您根据数组索引命名 html 选择时才有效:
工作版本:
<select class="form-control" id="field_answer{{i}}" name="field_answer{{i}}" [(ngModel)]="resultAnswer[i].answer" [compareWith]="compareFn">
<option [ngValue]="answer" *ngFor="let answer of Question.answers; trackBy: trackAnswerById">{{answer.id}} {{answer.description}}</option>
</select>
推荐阅读
- android - android os挂机时如何调试系统logcat
- java - 如何使用 JButton 添加另一个按钮,而不调整框架大小以使其可见?
- javascript - 在for循环中串行发送多个axios请求(一个接一个)
- android - 更新到 Android 10 api 版本 29 后,SQLite 数据库崩溃
- python - 根据条件在python数据框中逐行更改项目
- python - 获取字符串的行号
- excel - 日期格式在德语到英语的不同系统中表现出色
- elasticsearch - Elastic.Apm.EntityFramework6.Ef6Interceptor, Elastic.Apm.EntityFramework6 在应用程序配置中注册
- python - '消息已被删除:' 不可调用
- bash - 以 sudo -H -u 用户身份运行时执行找不到 var