angular - 如何根据数组中的 N 个元素绑定 N 个选择 (*ngFor)
问题描述
我在这个问题上挣扎了很多。在我的示例中,我有N卡尽可能多的选择。
I assigned every select a name using an id from the cardsArray
so every name is unique, but when a value is choosen all the others fill up with the same value even if they are untouched.
HTML:
<div class="container-fluid">
<div class="row">
<div class="card shadow col-4 p-1" *ngFor="let card of cardsArray">
<div class="card-header">
<strong class="card-title text-danger">Select your favorite fruit</strong>
</div>
<div class="card-body">
<select
class="form-control"
[(ngModel)]="selectedFruit"
[name]="'select-' + card.id"
>
<option *ngFor="let fruit of selectArray" [ngValue]="fruit.emoji">
{{ fruit.name }}
</option>
</select>
</div>
<div class="card-footer">You selected: {{ selectedFruit }}</div>
</div>
TS:
export class AppComponent {
title = 'multiple-select';
cardsArray = [
{ id: 1, name: 'First' },
{ id: 2, name: 'Second' },
{ id: 3, name: 'Third' },
{ id: 4, name: 'Fourth' }
]
selectedFruit: string = '';
selectArray = [
{ id: 1, name: 'Banana', emoji: '' },
{ id: 2, name: 'Apple', emoji: '' },
{ id: 3, name: 'Pineapple', emoji: '' },
{ id: 4, name: 'Kiwi', emoji: '' }
]
}
我该如何解决这个问题?
解决方案
您将它们全部绑定到同一个selectedFruit
变量。您应该将它们与不同的变量绑定,以便它们可以同时具有不同的值。
您可以将更改更改为selectedFruit
对象,并将选择与该对象的属性绑定:
export class AppComponent {
title = 'multiple-select';
cardsArray = [
{ id: 1, name: 'First' },
{ id: 2, name: 'Second' },
{ id: 3, name: 'Third' },
{ id: 4, name: 'Fourth' }
]
selectedFruit: any = {};
selectArray = [
{ id: 1, name: 'Banana', emoji: '' },
{ id: 2, name: 'Apple', emoji: '' },
{ id: 3, name: 'Pineapple', emoji: '' },
{ id: 4, name: 'Kiwi', emoji: '' }
]
}
<div class="container-fluid">
<div class="row">
<div class="card shadow col-4 p-1" *ngFor="let card of cardsArray">
<div class="card-header">
<strong class="card-title text-danger">Select your favorite fruit</strong>
</div>
<div class="card-body">
<select
class="form-control"
[(ngModel)]="selectedFruit[card.name]"
[name]="'select-' + card.id"
>
<option *ngFor="let fruit of selectArray" [ngValue]="fruit.emoji">
{{ fruit.name }}
</option>
</select>
</div>
<div class="card-footer">You selected: {{ selectedFruit[card.name] }}</div>
</div>
现在selectedFruit
将所有 4 个选择的值存储在相关属性First
、Second
和Third
中Fourth
。
这是工作示例:https ://stackblitz.com/edit/angular-ivy-gxrgmb?file=src/app/app.component.html
推荐阅读
- sveltekit - Windicss:使用内联类覆盖样式
- java - Java编译器和模块
- r - 基于 R 中的旧数据框创建一个新数据框
- flutter - Flutter:访问 Process 标准输出并流式传输到 StreamBuilder 小部件
- python - 无法在 keras 模型推理上使用 pandas UDF 来获得对 pyspark 数据帧的预测
- python - 熊猫处理被杀死
- vue.js - vuejs发票数学运算
- java - SQLite 数据库拒绝更新,我不知道为什么
- python - 如何避免 Python 中数值积分的奇异性
- python - 是否可以使用斜线制作文本消息 = 命令?电报 python 机器人