我正在 Angular2 RC1 中开发 SPA,但是由于最终版本现已发布,我的组织已决定将代码移植到 Angular 2 GA。虽然我可以修复大部分坏掉的东西,但我真的很难处理表格。
在我早期的 RC1 代码中,我使用了 ControlGroup 和 Control 以及 FormBuilder。我正在使用它们来执行通常的表单操作,例如验证、添加和删除控件等。但是现在显然它们已被删除,我不知道是什么取代了它们。
我尝试了 API 指南 FormControl 或 FormGroup 中的其他一些类,但都没有真正帮助。我想知道上面两个类的替代品是什么。
编辑: FormControl 和 FormGroup 已经消除了 TypeScript 文件中的错误,但是,在标记中,我收到了 inline template:0:0 caused by: No provider for FormBuilder!
错误。
更新: 我可以使用 FormGroup、FormControl 和 FormBuilder。通过将 ReactiveFormsModule 添加到 app.module.ts 文件解决了上述错误。但是,我收到错误 inline template:30:61 caused by: this.form._updateTreeValidity is not a function.
模板中的那一行是<form #userForm="ngForm" (ngSubmit)="submitUser()" [formGroup]="userForm" novalidate autocomplete="off">
有任何想法吗?
最佳答案
可以使用 FormGroup
或 FormBuilder
代替。 FormBuilder
只是 FormGroup
的简写方法。所以建议用于较大/复杂的表格。
您上面显示的代码的问题是您同时声明了 FormGroup 和 ngModel- #userForm="ngForm"
,据我所知,它们不能一起使用- not easily anyway ...我也犯了这个错误。
private myForm: FormGroup;
constructor(){
this.myForm = new FormGroup({
name: new FormGroup({
first: new FormControl('Nancy', Validators.required),
last: new FormControl('Drew')
}),
email: new FormControl('')
});
}
//The same thing using 'FormBuilder': (Note this would not change the template)
constructor(@Inject(FormBuilder) fb: FormBuilder) {
this.myForm = fb.group({
name: fb.group({
first: ['Nancy', Validators.required],
last: 'Drew',
}),
email: '',
});
}
你的模板是这样的:
<form [formGroup]="myForm" novalidate autocomplete="off">
<div formGroupName="name" novalidate autocomplete="off">
<input type="text" formControlName="first"/>
<input type="text" formControlName="last"/>
<span [hidden]="myForm.controls['name'].valid">Error</span>
</div>
<input type="text" formControlName="email"/>
</form>
这种方法的替代方法是使用 Angular's Template Driven Forms ,这是您将使用
[(ngModel)]="someInput"
的地方关于angularjs - Angular2 GA/Final Release 中 ControlGroup 和 Control 的替代方案是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39655636/