我正在将代码从角度beta迁移到RC5版本。 我面临着使用的基于模型的表格的问题。 因为我已经在角度2 beta中开发了很多形式。我很难将基于模型的表单更改为基于模板的表单。 任何形式迁移方面的帮助都非常受欢迎。
我现有的代码就像这样
profile.ts
import {FORM_DIRECTIVES, REACTIVE_FORM_DIRECTIVES} from '@angular/forms';
import {FormBuilder, FormGroup, FormControl, Validators} from '@angular/forms';
this.firstName = new FormControl();
this.lastName = new FormControl();
this.email = new FormControl();
this.addressLine = new FormControl();
this.postal = new FormControl();
this.postalArea = new FormControl();
this.form = builder.group({
firstName: this.firstName,
lastName: this.lastName,
email: this.email,
addressLine: this.addressLine,
postal: this.postal,
postalArea: this.postalArea,
photo: this.photo
});
和profile.HTML中的模板如下所示
<form class="form-default" [formGroup]="form">
<input type="text" class="form-control" id="firstName" [(ngModel)]="model.firstName" formControlName="firstName" maxlength="200">
<input type="text" class="form-control" id="lastName" [(ngModel)]="model.lastName" formControlName="lastName" maxlength="200">
<input type="text" class="form-control" id="email" [(ngModel)]="model.username" readonly formControlName="email" maxlength="100">
</form>
我在控制台中遇到以下错误。
EXCEPTION:错误:未捕获(在承诺中):EXCEPTION:错误 /assets/scripts/my-profile/my-profile.html:176:66原始例外: ngModel不能用于使用父formGroup指令注册表单控件。尝试使用 而是formGroup的合作伙伴指令“formControlName”。例如:
<div [formGroup]="myGroup"> <input formControlName="firstName"> </div> In your class: this.myGroup = new FormGroup({ firstName: new FormControl() }); Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions: Example: <div [formGroup]="myGroup"> <input formControlName="firstName"> <input [(ngModel)]="showMoreControls" [ngModelOptions]="{standalone: true}"> </div>
答案 0 :(得分:5)
您可以在这里找到answer to the same problem添加:
[ngModelOptions]="{standalone: true}"
答案 1 :(得分:-1)
要在你的html中同时拥有ngModel
和formControl
,你必须在你的组件中有一个模型(例如下例中的firstName
)你从你的html绑定到您还需要构建一个包含所需formControl
的表单组(例如,在以下示例中为firstNameControl
)
this.firstName: string;
this.form = builder.group({
firstNameControl: this.firstName,
});
<form [formGroup]="form">
<input type="text" [(ngModel)]="firstName" [formControl]="form.controls.firstNameControl"></input>
</form