错误:formControlName必须与父formGroup指令一起使用.您需要添加一个formGroup指令 - Angular反应形式

Sim*_*mon 21 angular2-forms angular

我有以下模板.我正试图掌握反应形式,但我遇到了问题.

<form [formGroup]="guestForm" novalidate>
    <div class="panel-body">
        <form>
            <div class="col-md-12 col-sm-12">
                <div class="form-group col-md-3 col-sm-6">
                    <label>First Name*  </label>
                    <input formControlName="firstname" type="text" class="form-control input-sm">
                </div>
            </div>
        </form>
    </div>
</form>
Run Code Online (Sandbox Code Playgroud)

然后在我的组件中我有:

@Component({
    selector: 'guest-input',
    templateUrl: './guest-input.component.html',
})
export class GuestInputComponent implements OnInit {
    @Input()
    guest: Guest;

    guestForm: FormGroup;

    constructor(private _fb: FormBuilder) { }

    ngOnInit() {
        this.guestForm = this._fb.group({
            firstname: ['test', [Validators.required, Validators.minLength(3)]]
        });
    }
Run Code Online (Sandbox Code Playgroud)

这一切对我来说都很好,但由于某种原因,我得到:

错误:未捕获(在承诺中):错误:formControlName必须与父formGroup指令一起使用.您将要添加formGroup指令并将其传递给现有的FormGroup实例(您可以在类中创建一个).

我以为我已经在我的身上宣布了这一点<form>.

Ste*_*ota 28

您在带有FormGroup指令的表单标记内嵌套了表单标记,将其删除:

<form [formGroup]="guestForm" novalidate>
    <div class="panel-body">
        <form> -> Remove this
            <div class="col-md-12 col-sm-12">
                <div class="form-group col-md-3 col-sm-6">
                    <label>First Name*  </label>
                    <input formControlName="firstname" type="text" class="form-control input-sm">
                </div>
            </div>
        </form> -> Remove this
    </div>
</form>
Run Code Online (Sandbox Code Playgroud)

  • 我和他有同样的问题,但我没有复制我的表单标签。显示的错误看起来和他一模一样 (4认同)

小智 5

在中modelDrivenForms[formGroup]="guestForm"应在父元素中

<div class="form-group col-md-3 col-sm-6" [formGroup]="guestForm">
  <label>First Name*  </label>
  <input formControlName="firstname" type="text" class="form-control input-sm">
</div>
Run Code Online (Sandbox Code Playgroud)