角度为2 rc5的基于模型的形式不起作用

时间:2016-09-01 11:52:49

标签: forms angular angular-rc5

我正在将代码从角度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>

2 个答案:

答案 0 :(得分:5)

您可以在这里找到answer to the same problem添加:

[ngModelOptions]="{standalone: true}"

答案 1 :(得分:-1)

要在你的html中同时拥有ngModelformControl,你必须在你的组件中有一个模型(例如下例中的firstName)你从你的html绑定到您还需要构建一个包含所需formControl的表单组(例如,在以下示例中为firstNameControl

成分:

 this.firstName: string;
 this.form = builder.group({
            firstNameControl: this.firstName,                
        });

HTML

<form [formGroup]="form">    
<input type="text" [(ngModel)]="firstName" [formControl]="form.controls.firstNameControl"></input>
</form