Angular2如果在表单标记中使用ngModel,则必须设置name属性或表单

Tam*_*mpa 185 angular angular-forms

我从Angular 2收到此错误

core.umd.js:5995 EXCEPTION:未捕获(在承诺中):错误:app/model_exposure_currencies/model_exposure_currencies.component.html:57:18中的错误:如果在表单标记中使用了ngModel,则name属性必须为set或表单控件必须在ngModelOptions中定义为"standalone".

      Example 1: <input [(ngModel)]="person.firstName" name="first">
      Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">
<td *ngFor="let lag of ce.lags">
    <div class="form-group1">
        <input name="name" [(ngModel)]="lag.name" [ngModelOptions]="{standalone: true}"  class="form-control" pattern="[0-9]*(\.[0-9]+)?" required>
    </div>

</td>
Run Code Online (Sandbox Code Playgroud)

这就是我使用表单标签的方式:

 <form #f="ngForm" (ngSubmit)="onSubmit()">
Run Code Online (Sandbox Code Playgroud)

Thy*_*n C 371

如果使用ngForm,则所有[(ngModel)]=""必须具有值的属性名称的输入字段.

<input [(ngModel)]="firstname" name="something">
Run Code Online (Sandbox Code Playgroud)

  • 在此 https://angular.io/docs/ts/latest/api/forms/index/NgModel-directive.html 中搜索“名称属性” (2认同)
  • 从Angular 5文档(https://angular.io/guide/forms):“将[(ngModel)]与表单结合使用时,定义名称属性是必需的。” (2认同)
  • 也适用于 Angular 7! (2认同)
  • 这个答案帮助了我两次,但为什么提交的姓名很重要 (2认同)
  • 我想补充一点,只有当 ngModel 在名称之前出现时它才有效。 (2认同)

Ali*_*avi 45

由于每个开发人员都有共同的习惯,不读完整的错误,只需阅读第一行并开始寻找其他人的答案:) :)我也是其中之一,这就是我在这里的原因:

阅读错误,清楚地说:

Example 1: <input [(ngModel)]="person.firstName" name="first">
Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">
Run Code Online (Sandbox Code Playgroud)

我们还需要了解这个错误吗?

使用任何一个选项一切都会顺利进行.

  • 对每种替代方案的含义/效果的解释将是有用的 - 任意选择其中一个似乎不是一个好主意. (23认同)
  • 这个答案在同一周内帮助了我两次(显然第一次没有坚持下去);) (2认同)

Vin*_*eri 29

这两个属性都是必需的,并且还要重新检查所有表单元素都有"name"属性.如果你使用表单提交概念,其他明智的只是使用div标签而不是表单元素.

<input [(ngModel)]="firstname" name="something">
Run Code Online (Sandbox Code Playgroud)


els*_*hev 22

在我的情况下,发生此错误是因为在html标记中,下面还有另外一行没有name属性。

<form id="form1" name="form1" #form="ngForm">
  <div class="form-group">
    <input id="input1" name="input1" [(ngModel)]="metaScript" />
    ... 
    <input id="input2" [(ngModel)]="metaScriptMessage"/>
  </div>
</form>
Run Code Online (Sandbox Code Playgroud)

但是浏览器仍然报告第一行有错误。如果您在这两者之间还有其他因素,就很难发现错误的根源。 在此处输入图片说明


小智 14

当你清楚地看到控制台时.它会给你两个例子.实现其中任何一个.

<input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone:
   true}">
Run Code Online (Sandbox Code Playgroud)

要么 <input [(ngModel)]="person.firstName" name="first">

  • 不要随便选择一个,你必须明白你在做什么 (2认同)

Eri*_*ric 13

我注意到,Chrome开发人员工具有时只会在swiggly red中强调第一个元素,即使它已正确设置了名称.这让我失去了一段时间.

必须确保为包含ngModel的表单上的每个元素添加一个名称,而不管哪个是粗体下划线.


Kai*_*las 11

修复起来很容易。

对我来说,我们在表单中有不止一个输入。我们需要隔离导致错误的输入/行并简单地添加name属性。这为我解决了这个问题:

前:

<form class="example-form">

    <mat-form-field appearance="outline">
Run Code Online (Sandbox Code Playgroud)
      <mat-select placeholder="Select your option" [(ngModel)]="sample.stat"> <!--HERE -->
Run Code Online (Sandbox Code Playgroud)
          <mat-option *ngFor="let option of actions" [value]="option">{{option}</mat-option>
      </mat-select>
    </mat-form-field>

    <mat-form-field appearance="outline">
      <mat-label>Enter number</mat-label>
Run Code Online (Sandbox Code Playgroud)
      <input id="myInput" type="text" placeholder="Enter number" aria-label="Number"
        matInput [formControl]="myFormControl" required [(ngModel)]="number">  <!--HERE -->
Run Code Online (Sandbox Code Playgroud)
    </mat-form-field>
Run Code Online (Sandbox Code Playgroud)
    <mat-checkbox [(ngModel)]="isRight">Check!</mat-checkbox> <!--HERE -->
Run Code Online (Sandbox Code Playgroud)
  </form>
Run Code Online (Sandbox Code Playgroud)

之后: 我刚刚nameselectand添加了属性,并checkbox解决了问题。如下:

<mat-select placeholder="Select your option" name="mySelect" 
  [(ngModel)]="sample.stat"> <!--HERE: Observe the "name" attribute -->

<input id="myInput" type="text" placeholder="Enter number" aria-label="Number"
        matInput [formControl]="myFormControl" required [(ngModel)]="number">  <!--HERE -->

<mat-checkbox name="myCheck" [(ngModel)]="isRight">Check!</mat-checkbox> <!--HERE: Observe the "name" attribute -->
Run Code Online (Sandbox Code Playgroud)

如您所见,添加了name属性。没有必要与您的ngModel名字相同。只需提供name属性即可解决问题。


Joh*_*ird 3

您没有提到您正在使用的版本,但如果您使用的是 rc5 或 rc6,那么“旧”样式的表单已被弃用。看看这个关于“新”表单技术的指导:https://angular.io/docs/ts/latest/guide/forms.html