我在Angular 2中得到了这个错误

core.umd.js:5995 EXCEPTION: Uncaught (in promise): Error: Error in app/model_exposure_currencies/model_exposure_currencies.component.html:57:18 如果ngModel在一个form标签中被使用,则name . ngModel在一个form标签中被使用 属性必须设置或窗体 控件必须在ngModelOptions中定义为'standalone'。

示例1:

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

示例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>

这是我如何使用表单标签:

<form #f="ngForm" (ngSubmit)="onSubmit()">

当前回答

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

<input [(ngModel)]="firstname" name="something">

其他回答

对我来说,解决办法很简单。我将<form>标签更改为<div>,错误就消失了。

修理起来很容易。

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

之前:

<form class="example-form">

    <mat-form-field appearance="outline">

      <mat-select placeholder="Select your option" [(ngModel)]="sample.stat"> <!--HERE -->

          <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>

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

    </mat-form-field>

    <mat-checkbox [(ngModel)]="isRight">Check!</mat-checkbox> <!--HERE -->

  </form>

后: 我只是为选择和复选框添加了名称属性,这解决了这个问题。如下:

<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 -->

如您所见,添加了name属性。它没有必要被赋予与你的ngModel相同的名称。只要提供name属性就可以解决这个问题。

对于那些对错误消息本身不惊慌的人来说,只是谷歌一下为什么这里的例子不起作用(即当文本输入到输入字段时,动态过滤不会发生):它不会起作用,直到你在输入字段中添加name参数。没有任何东西可以解释为什么管道不能工作,但是错误消息指向这个主题,并根据接受的答案修复它使动态过滤器能够工作。

在我的例子中,错误发生是因为下面的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>

但是浏览器仍然报告第一行有错误。如果你在这两者之间有其他元素,就很难发现错误的根源。

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

<input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone:true}">

or

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