我在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()">

当前回答

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

其他回答

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

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

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

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

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

正如每个开发人员都有一个共同的习惯,不阅读完整的错误,只阅读第一行,然后开始从其他人那里寻找答案:):)我也是其中之一,这就是为什么我在这里:

阅读错误,清楚地说:

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

我们还需要什么来理解这个错误呢?

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

如果使用ngForm,所有[(ngModel)]=""的输入字段必须有一个带值的属性名。

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

独立的

通过设置[ngModelOptions]="{standalone: true}",可以告诉Angular,忽略表单和/或ngForm,只需要将它绑定到firstname变量即可。

但是,如果错误地使用了form-tag(就像我的情况一样),则将form更改为div是另一种选择(但仅当您的样式不需要form-tag时)。