javascript - Angular 2.0 和 TypeScript - 从多维数组对象填充 <select> 选项

标签 javascript arrays multidimensional-array angular angular2-forms

我想填充 <select name="selectmodel"> <option>来自嵌套的对象数组,基于对 <select name="selectmake"> <option> 的选择元素。

这是多维数组:

muscleCars = [
    {
      id: 1, name: "Chevrolet", models: [
        { model: "Camaro" },
        { model: "Corvette" }
      ]
    },
    {
      id: 2, name: "Dodge", models: [
        { model: "Charger" },
        { model: "Challenger" },
        { model: "Viper" }
      ]
    },
    {
      id: 3, name: "Ford", models: [
        { model: "GT" },
        { model: "Mustang" }
      ]
    }
];

这是HTML

//select for Make:
<select name="selectmake" [(ngModel)]="makeListFilter">
    <option *ngFor="let muscleCar of muscleCars" [ngValue]="muscleCar.name">{{muscleCar.name}}</option>
</select>

//select for Model:
<select name="selectmodel" [(ngModel)]="modelListFilter">
    <option *ngFor="let muscleCar of muscleCars" [ngValue]="muscleCar.models">{{muscleCar.models}}</option>
</select>

因此,基本上当您选择 Chevrolet 时,我希望第二个元素填充为 CamaroCorvette .

目前,第二个select元素填充有数组 [object Object]对于每个品牌,但无法弄清楚如何更深入地挖掘这一点。

enter image description here

这是一个小插曲: https://embed.plnkr.co/0eEIJg5uzL6KsI70wWsC/

如有任何帮助,我们将不胜感激。

最佳答案

您的 HTML 应该是这样的:

<select name="selectmake" [(ngModel)]="makeListFilter">
    <option *ngFor="let muscleCar of muscleCars" [ngValue]="muscleCar">{{muscleCar.name}}</option>
</select>

<select name="selectmodel" [(ngModel)]="modelListFilter">
    <option *ngFor="let carModel of makeListFilter?.models" [ngValue]="carModel.model">{{carModel.model}}</option>
</select>

所以,这里发生的是 selectmake 下拉列表的选定值绑定(bind)到 makeListFilter 并且第二个下拉列表 selectmodel 是根据选定值填充的第一个下拉菜单。您会注意到我使用 ngValue 指令绑定(bind)了在第一个下拉列表中选择的整个 Object,因此它可用于填充第二个下拉列表。您会注意到的另一个有趣的事情是我在第二个下拉列表中使用的 Elvis 运算符 (?) - 它用于告诉第二个下拉列表仅在第一个选择值后填充自身下拉列表,这是避免在遍历 undefined 值时出错所必需的。如果您不想使用 Elvis 运算符,您可以使用 *ngIf 指令来防止出现提到的错误,但这意味着第二个下拉列表只会在您选择某些内容后出现在第一个下拉列表中:

<select *ngIf="makeListFilter" name="selectmodel" [(ngModel)]="modelListFilter">
    <option *ngFor="let carModel of makeListFilter.models" [ngValue]="carModel.model">{{carModel.model}}</option>
</select>

关于javascript - Angular 2.0 和 TypeScript - 从多维数组对象填充 <select> 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39601046/

相关文章:

javascript - 可拖放的 z-index 问题

python - 为什么修改字典中的键也会修改分配给它们的数组? (Python)

java - 如何在 Android 中使用 For 循环创建对象数组

python - 图未填充窗口 python

javascript - 有没有办法通过javascript找出Chrome的媒体设置环境?

javascript - JQuery/JavaScript div 标签 "containment"方法/算法?

java - AssertJ 多维数组断言(深度等于)

java - 在Java中打印二维数组 radio

Javascript if 和 else 同时运行

C++,数组中的地址