在创建模型驱动表单时,我收到错误: 错误:formControlName必须与父formGroup指令一起使用。您将要添加formGroup 指令并将其传递给现有的FormGroup实例(您可以在类中创建一个)。
请告诉我这段代码出了什么问题。
app.component.html
<div class="col-md-6">
<form (ngSubmit)="saveSession(newSessionForm.value)" autocomplete="off">
<div class="form-group">
<label for="sessionName">Session Name:</label>
<input formControlName="name" id="sessionName" type="text" class="form-control" placeholder="session name..." />
</div>
<div class="form-group">
<label for="abstract">Abstract:</label>
<textarea formControlName="abstract" id="abstract" rows=3 class="form-control" placeholder="abstract..."></textarea>
</div>
<button type="submit" class="btn btn-primary">Save</button>
</form>
</div>
app.component.ts
export class CreateSession {
newSessionForm:FormGroup;
abstract : FormControl;
name : FormControl;
ngOInInit(){
this.name = new FormControl('', Validators.required)
this.abstract = new FormControl('', Validators.required)
this.newSessionForm = new FormGroup({
name:this.name,
abstract: this.abstract
})
}
saveSession(formValues){
console.log(formValues);
}
答案 0 :(得分:6)
Angular在任何父元素上等待FormGroupDirective
。所以:
<form [formGroup]="newSessionForm" ...
<input formControlName="name"
...
<input formControlName="abstract"
如果您想在没有FormControl
的情况下使用formGroup
,则可以改为使用FormControlDirective
:
<input [formControl]="name"
...
<input [formControl]="abstract"
答案 1 :(得分:1)
你可以试试这个吗
<div class="col-md-12" formArrayName="educations">
</div>
ts 文件代码
educations: this.formBuilder.array([]),
或
<form [formGroup]="manageOrderForm">
</form>
ts 文件代码
import { Router } from '@angular/router';
@Component({
selector: 'app-order',
templateUrl: './order.component.html',
styleUrls: ['./order.component.css']
})
export class OrderComponent implements OnInit {
manageOrderForm: any;
}
答案 2 :(得分:0)
首先,您必须指定formGroup,其中一个将驱动与输入绑定的表单控件。
<form [formGroup]="newSessionForm" (ngSubmit)="saveSession(newSessionForm.value)" autocomplete="off">
<div class="form-group">
<label for="sessionName">Session Name:</label>
<input formControlName="name" id="sessionName" type="text" class="form-control" placeholder="session name..." />
</div>
<div class="form-group">
<label for="abstract">Abstract:</label>
<textarea formControlName="abstract" id="abstract" rows=3 class="form-control" placeholder="abstract..."></textarea>
</div>
<button type="submit" class="btn btn-primary">Save</button>
答案 3 :(得分:0)
如果您的FormGroup在父组件中,而Form控件在子组件中,则必须在子组件中声明viewProviders:[{提供:ControlContainer,useExisting:FormGroupDirective}]:
@Component({
selector: 'child',
templateUrl: './child.component.html',
styleUrls: ['./child.component.css'],
viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }]
})
export class ChildComponent implements OnInit {
...