当前位置: 首页 > 知识库问答 >
问题:

如何在Angular2[重复]的对象数组上使用select/option/ngfor

林绪
2023-03-14

我在Angular2中创建一个由对象数组而不是字符串支持的select时遇到了麻烦。我知道如何使用ngOptions在AngularJS中实现这一点,但在Angular2中似乎行不通(我使用的是Alpha42)。

  1. “select String”是一个简单的基于字符串的选择,它工作得很好。
  2. “通过双向绑定选择对象”是我尝试使用双向绑定的尝试。不幸的是,它以两种方式失败--当页面加载时,select显示错误的值(foo而不是bar),以及当我在列表中选择一个选项时,值“[object object]”被发送到备份存储,而不是正确的值。
  3. “Select Object via event”是我试图从$event中获取选定值的尝试。它也以两种方式失败--初始加载不正确的方式与#2相同,并且当我在列表中选择一个选项时,值“[object object]”将从事件中检索,因此我无法获得正确的值。选择将被清除。
  4. “通过字符串选择对象”是使用有效对象的唯一方法。不幸的是,它通过使用来自#1的字符串数组并将值从字符串转换为对象再转换回来而真正起作用。

如果这是我想要的方式,我可以做第4条,但它似乎相当笨拙。还有别的办法吗?我是不是太早进入阿尔法了?我做了什么傻事吗?

import {Component, FORM_DIRECTIVES, NgFor} from 'angular2/angular2';

interface TestObject {
  name:string;
  value:number;
}

@Component({
  selector: 'app',
  template: `
    <h4>Select String</h4>
    <select [(ng-model)]="strValue">
        <option *ng-for="#o of strArray" [value]="o">{{o}}</option>
    </select>

    <h4>Select Object via 2-way binding</h4>
    <select [(ng-model)]="objValue1">
        <option *ng-for="#o of objArray" [value]="o">{{o.name}}</option>
    </select>

    <h4>Select Object via event</h4>
    <select [ng-model]="objValue2" (change)="updateObjValue2($event)">
        <option *ng-for="#o of objArray" [value]="o">{{o.name}}</option>
    </select>

    <h4>Select Object via string</h4>
    <select [ng-model]="objValue3.name" (change)="updateObjValue3($event)">
        <option *ng-for="#o of strArray" [value]="o">{{o}}</option>
    </select>

    <div><button (click)="printValues()">Print Values</button></div>

  `,
  directives: [FORM_DIRECTIVES, NgFor]
})
export class AppComponent {
  objArray:TestObject[] = [{name: 'foo', value: 1}, {name: 'bar', value: 1}];
  objValue1:TestObject = this.objArray[1];
  objValue2:TestObject = this.objArray[1];
  objValue3:TestObject = this.objArray[1];

  strArray:string[] = this.objArray.map((obj:TestObject) => obj.name);
  strValue:string = this.strArray[1];

  updateObjValue2(event:Event):void {
    const value:string = (<HTMLSelectElement>event.srcElement).value;

    this.objValue2 = this.objArray.find((obj:TestObject) => obj.name === value);
  }

  updateObjValue3(event:Event):void {
    const value:string = (<HTMLSelectElement>event.srcElement).value;

    this.objValue3 = this.objArray.find((obj:TestObject) => obj.name === value);
  }

  printValues():void {
    console.log('strValue', this.strValue);
    console.log('objValue1', this.objValue1);
    console.log('objValue2', this.objValue2);
    console.log('objValue3', this.objValue3);
  }
}

共有1个答案

祁永嘉
2023-03-14

我不知道阿尔法是什么样子的,但我现在正在使用测试版12,这工作很好。如果您有一个对象数组,请创建一个select,如下所示:

<select [(ngModel)]="simpleValue"> // value is a string or number
    <option *ngFor="let obj of objArray" [value]="obj.value">{{obj.name}}</option>
</select>

如果你想在实际对象上进行匹配,我会这样做:

<select [(ngModel)]="objValue"> // value is an object
    <option *ngFor="let obj of objArray" [ngValue]="obj">{{obj.name}}</option>
</select>
 类似资料:
  • 我有一个这样的数组 我想打印/显示对象键,如jam,ram,sam作为表格标题,其值在各自的表格中与Pprimeng表格成角度。我尝试了各种方法,但无法正确显示。动态值的Primeng表 如果我想显示,我需要数组在表单中自动显示 tdata中的值可能会动态更改,它们也来自后端和密钥

  • 我知道要在数组中查找值是否存在,我可以使用indexOf,但如何使用对象数组呢?

  • 越来越烦人了!我有一个对象数组我找到了这个解决方案:如何在Angular2中的对象数组上使用select/option/ngfor 但毕竟我做的和这个一样,但如果我记录我的$事件,它是未定义的…可能是因为它是stringified的,但之后没有解析回来。 下面是我的代码示例: 这是组件代码: 请帮帮我。未定义selectedCondition的控制台日志。

  • 我对编程很陌生,我找不到我的问题的解决方案,你能给我解决方案吗? 我有这个JSON文件: 在我的js中需要类似这样的东西(但我想导入我的JSON以获得像这样的数组): 我不知道不使用jQuery该怎么做。 我已经试过了: 这几乎是我想要的,但当我在代码中使用它时,它不起作用,因为我不想要对象,而是像上面所说的和数组。

  • 我有一个数组。如何按类型、名称和大小以及递增量找到双重许可。增加数量后删除相同的。

  • 我正在尝试设置下拉的默认值,我设置了一个默认值的模型,但它没有更新选择 请参阅此https://plnkr.co/edit/bnm5yxx78iykv2Opazol?p=preview