【问题标题】:Passing ID in template driven Angular form以模板驱动的 Angular 形式传递 ID
【发布时间】:2017-10-24 07:23:36
【问题描述】:

我在这篇文章 (http://blog.ng-book.com/the-ultimate-guide-to-forms-in-angular-2/) 之后创建了一个 Angular 表单:

<div *ngFor="let data of somevar.records">
  <form #abc_form="ngForm" (ngSubmit)="onSubmit(abc_form.value)">
    {{data.id}}    // prints 5
    <input name="id" type="hidden" value={{data.id}} ngModel>
    <input type="radio" name="name" value={{data.id}} ngModel>

    <div class="submit-button">
      <button type="submit">Save</button>
    </div>
  </form>
</div>

组件中的 data 哈希看起来像:

somevar = {records: [{id: 5}, {id: 6}]}

在这里,当我在视图中直接插入 data.id 时,它会在 UI 中打印 5。但是,当我尝试将其作为值分配给隐藏的输入字段时,它不存在。因此,在提交表单时,ID 参数不存在。

这里有什么问题?那么传递ID的正确方法是什么?

编辑

我也试过了:

<input name="id" type="hidden" [value]="data.id" ngModel>

注意当我删除 ngModel 时,该值被分配给隐藏字段:

<input name="id" type="hidden" [value]="data.id">

或

<input name="id" type="hidden" value={{data.id}}>

上述两种方法都有效并创建了分配了值的隐藏输入。但是,它不再是 ngModel 的一部分了

【问题讨论】:

  • 你可以试试这个[ngModel] = "data.id" 吗?
  • 是的,可以,你能解释一下吗?
  • @RahulSingh 你能解释一下为什么 radio 元素可以工作,但 input 元素不能。 plnkr.co/edit/GGU7imcBCCJFWVsGgR89?p=preview

标签: javascript angular


【解决方案1】:

您可以使用[ngModel]来绑定值,而不是使用ngModel和value:

<input type="hidden" name="id" [ngModel]="data.id">

现在它将成为您表单的一部分。

演示:http://plnkr.co/edit/oF5lFSbMbyltB0Mgi6hi?p=preview

【讨论】:

  • 我已经编辑了我的代码。我也有 &lt;input type="radio" name="name" value={{data.id}} ngModel&gt; whick 工作,但它不能作为隐藏字段的一部分工作?
【解决方案2】:

在 ngFor 循环中创建多个 ngModel 控件时,每个控件和名称必须是唯一的

你可以试试这个:

<div *ngFor="let data of somevar.records;let index = index;trackBy:trackByIndex;">
  <form #abc_form="ngForm" (ngSubmit)="onSubmit(abc_form.value)">
    {{data.id}}    // prints 5
    <input name="id_{{index}}" type="hidden" [ngModel]=data[index].id>

    <div class="submit-button">
      <button type="submit">Save</button>
    </div>
  </form>
</div>

【讨论】:

  • 使用索引的好建议
【解决方案3】:

要使用数据绑定,您需要将隐藏输入更改为:

<input name="id" type="hidden" [value]=data.id>

删除ngModel,因为通过[value] 和ngModel 的数据绑定可能会相互干扰。

编辑 我的错,当然你也必须去掉花括号。

【讨论】:

  • 解析器错误:得到插值 ({{}}),其中表达式应位于 [{{data.id}}] 的第 0 列处
  • {{}} 从不与[prop]="..." 或(event)="..." @Abhi 一起使用
  • @RahulSingh 正确!!!这是我在问题中发布的轮胎之一。
  • 去掉大括号并尝试同样的方法
  • @RahulSingh 还是没有运气
猜你喜欢
  • 1970-01-01
  • 2017-03-31
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
  • 2019-01-24
相关资源
最近更新 更多