Angular 和 Typescript 中带有 select 选项的数组
Array with select option in Angular and 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、姓名、分数、描述
不起作用的是我总是将 Id 放入答案中[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 选定的值。如果是这样,有人可以帮助如何做到这一点。
感谢任何帮助!非常感谢。
奥热尔
你必须像这样select改变
来回答问题
<select class="form-control" name="selectAnswer" [(ngModel)]="selectedAnswerId" (change)="setAnswer(i)">
<option *ngFor="let answers of QuestionOption.Answers" [ngValue]="answers.id">{{answers.description}}</option>
<select>
在component.ts
selectedAnswerId : number;
setAnswer(index){
this.answer[index].push({id : this.selectedAnswerId})
}
我找到了解决方案。问题是由于 Array.compareWith 函数无法正常工作。它仅在您根据数组索引命名 html select 时有效:
工作版本:
<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>
我在一个页面上显示 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、姓名、分数、描述
不起作用的是我总是将 Id 放入答案中[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 选定的值。如果是这样,有人可以帮助如何做到这一点。
感谢任何帮助!非常感谢。 奥热尔
你必须像这样select改变
来回答问题<select class="form-control" name="selectAnswer" [(ngModel)]="selectedAnswerId" (change)="setAnswer(i)">
<option *ngFor="let answers of QuestionOption.Answers" [ngValue]="answers.id">{{answers.description}}</option>
<select>
在component.ts
selectedAnswerId : number;
setAnswer(index){
this.answer[index].push({id : this.selectedAnswerId})
}
我找到了解决方案。问题是由于 Array.compareWith 函数无法正常工作。它仅在您根据数组索引命名 html select 时有效:
工作版本:
<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>