【问题标题】:Angular 2 Forms: binding html select to collection of objectsAngular 2 Forms:将html选择绑定到对象集合
【发布时间】:2016-12-29 04:19:08
【问题描述】:

我想在 Angular 2 应用程序(RC 5,forms 0.3.0)中显示一组可选对象

<select [(ngModel)]="selectedItem">       
  <option *ngFor="let item of selectableItems"
          [value]="item">
    {{ item }}
  </option>
</select>

<div> {{ selectedItem }} </div>

列表本身已正确显示。

但是为“selectedItem”显示的只是[object Object]。在代码中访问项目时,我得到相应的字符串“[object Object]”。我尝试切换到 ngValue,但结果相同。

当我使用原始值而不是对象时,整个事情都会起作用。但我怀疑我在这里遗漏了一些关键点。

感谢您的帮助。我在互联网搜索和反复试验上浪费了几个小时。也许有人遇到过同样的问题。

编辑 (24-08-16):我遇到了这个教程,它解释了如何创建常见的表单小部件。也许它对登陆此页面的人有用:https://scotch.io/tutorials/how-to-deal-with-different-form-controls-in-angular-2

【问题讨论】:

    标签: html forms angular angular2-ngmodel


    【解决方案1】:

    根据您的代码和解释,我假设“项目”是一个复杂的对象,而不是一个简单的对象。所以要在 HTML 中显示它,你可以使用:

    <div> {{ selectedItem | json }} </div>
    

    在代码中,您必须访问“项目”属性(如 item.value 或任何项目的属性。如果您想使用简单的值,您可以执行以下操作:

    <select [(ngModel)]="selectedItem">       
      <option *ngFor="let item of selectableItems"
              [value]="item.id">
        {{ item }}
      </option>
    </select>
    

    这当然是假设 item 是一个复杂类型。

    编辑

    经过一番挖掘(因为这也困扰着我),我找到了我真正想要的解决方案!要使用复杂对象,您只需要在绑定值时使用 [ngValue] !该修复程序在https://github.com/angular/angular/issues/4843 中进行了描述。所以上面会是这样的:

    <select [(ngModel)]="selectedItem">       
         <option *ngFor="let item of selectableItems"
                 [ngValue]="item">
                 {{item}}
         </option>
    </select>
    

    然后 selectedItem 将从列表中选择正确的项目,包括它的所有属性。

    【讨论】:

    • 感谢您抽出宝贵时间调查我的问题!我能够通过重新安装我所有的 npm 包然后应用您的解决方案来修复它。
    • 绑定效果很好,但我没有成功使用 [selected]="item.id === selectedItem.id" 设置所选项目。有什么建议吗?
    • 如果您使用的是复杂对象,则使用“ngValue”设置所选项目。您无需明确设置“已选择”。
    • 如何将复杂对象绑定回视图。
    猜你喜欢
    • 2017-04-01
    • 2016-06-26
    • 1970-01-01
    • 2020-02-17
    • 2018-02-28
    • 1970-01-01
    • 2016-12-30
    • 2020-09-28
    • 1970-01-01
    相关资源
    最近更新 更多