Angular 2 - 如何将对象值自动绑定到与表单控件相关的对象?
Angular 2 - How to automatically bind object values to related to Form Controls?
我正在使用 model driven forms
,我正在寻找一种更好的方法来将数据绑定到与 formControlName
相关的数据,因为我的表单上有超过 25 个字段,但我没有我不想像下面写的那样为所有 字段 编写代码。
模板:
<input type="text"
class="form-control"
formControlName="firstName"
name="firstName"
placeholder="First Name"
required>
组件:
this.refferalService.getReferringDataEdit(id).subscribe(
result => {
this.referringData = result.responseObject;
this.refferalForm.patchValue({
firstName: this.referringData.firstName
})
}
)
有办法吗"automatically"?
你可以这样做:
import {FormGroup,FormBuilder,FormControl} from '@angular/forms';
export class formComponent{
myForm : FromGroup
constructor(fb: FormBuilder){
this.myForm= fb.group({
'firstName' : [''],
'lastName' : [''],
});
}
onSubmit(value:string){
console.log(form);
}
}
稍后在您的 HTML 中像这样使用它:
<form [formGroup]="myForm" (ngSubmit)="onSubmit(myForm.value)">
<input type="text" placeholder="FirstName" [formControl] = "myForm.controls['firstName']">
<input type="text" placeholder="LastName" [formControl] = "myForm.controls['lastName']">
<button type="submit">Submit</button>
</form>
并将其与 (ngSubmit) 绑定。因此,无论何时您点击提交,该值都会反映在 myForm.value 中。 myForm 会将表单存储为 key/value 对。
在控制台中,您的输出将是:
Object :
firstName:....
lastName: ...
您可以参考:http://blog.ng-book.com/the-ultimate-guide-to-forms-in-angular-2/
EDIt:由于要求是保存来自服务的数据:
在您的订阅中,只需这样做:this.refferalForm.setValue(this.referringData);
setValue 需要一个具有 key/value 对
的对象
我可以看到两种方法:
第一种方法:
您可以为 "forms" (new/edit) 创建通用方法并创建包含或不包含值的表单,这样:
ngOnInit() {
// Imagine that the data is coming from API:
const referringData = { firstName: 'First', lastName: 'Last' };
this.initForm(referringData);
}
private initForm(data = {}): void {
// Note that you can pass nothing to this function,
// so the values will be initially undefined (no problem with that)
this.myForm = this.formBuilder.group({
firstName: [data.firstName, [Validators.required]],
lastName: [data.lastName, [Validators.required]]
});
}
第二种方法:
在这种方法中,您可以使用 [(ngModel)]
自动绑定它,因此您无需在组件文件中执行任何操作。
ngOnInit() {
// Imagine that the data is coming from API:
this.referringData = { firstName: 'First', lastName: 'Last'};
// init the form as always
}
并在模板中使用 [(ngModel)] 来 绑定 值 :
<input type="text" formControlName="firstName" [(ngModel)]="referringData.firstName">
<input type="text" formControlName="lastName" [(ngModel)]="referringData.lastName">
检查上述两种方法的完整来源。
注:
虽然没有任何地方说你不能同时使用 FormsModule
和 ReactiveFormsModule
,但我不会这样做,我更愿意使用第一种方法。
绑定fromControl的动态值或替换值,我们可以使用patchValue方法。
HTML Code :
<mat-form-field appearance="outline">
<mat-label>Email</mat-label>
<input matInput formControlName="email" >
<mat-icon matSuffix class="secondary-
text">mail</mat-icon>
</mat-form-field>
Component Code :
ngOnInit () {
/** This create form group */
this.resetPasswordForm =
this._formBuilder.group({
email:new FormControl({ value: '', disabled:true }),
});
this.updateEmail()
}
updateEmail(){
/** Update value of formControl */
this.resetPasswordForm.patchValue({
email: 'any@any.com'
});
}
我正在使用 model driven forms
,我正在寻找一种更好的方法来将数据绑定到与 formControlName
相关的数据,因为我的表单上有超过 25 个字段,但我没有我不想像下面写的那样为所有 字段 编写代码。
模板:
<input type="text"
class="form-control"
formControlName="firstName"
name="firstName"
placeholder="First Name"
required>
组件:
this.refferalService.getReferringDataEdit(id).subscribe(
result => {
this.referringData = result.responseObject;
this.refferalForm.patchValue({
firstName: this.referringData.firstName
})
}
)
有办法吗"automatically"?
你可以这样做:
import {FormGroup,FormBuilder,FormControl} from '@angular/forms';
export class formComponent{
myForm : FromGroup
constructor(fb: FormBuilder){
this.myForm= fb.group({
'firstName' : [''],
'lastName' : [''],
});
}
onSubmit(value:string){
console.log(form);
}
}
稍后在您的 HTML 中像这样使用它:
<form [formGroup]="myForm" (ngSubmit)="onSubmit(myForm.value)">
<input type="text" placeholder="FirstName" [formControl] = "myForm.controls['firstName']">
<input type="text" placeholder="LastName" [formControl] = "myForm.controls['lastName']">
<button type="submit">Submit</button>
</form>
并将其与 (ngSubmit) 绑定。因此,无论何时您点击提交,该值都会反映在 myForm.value 中。 myForm 会将表单存储为 key/value 对。
在控制台中,您的输出将是:
Object :
firstName:....
lastName: ...
您可以参考:http://blog.ng-book.com/the-ultimate-guide-to-forms-in-angular-2/
EDIt:由于要求是保存来自服务的数据:
在您的订阅中,只需这样做:this.refferalForm.setValue(this.referringData);
setValue 需要一个具有 key/value 对
我可以看到两种方法:
第一种方法:
您可以为 "forms" (new/edit) 创建通用方法并创建包含或不包含值的表单,这样:
ngOnInit() {
// Imagine that the data is coming from API:
const referringData = { firstName: 'First', lastName: 'Last' };
this.initForm(referringData);
}
private initForm(data = {}): void {
// Note that you can pass nothing to this function,
// so the values will be initially undefined (no problem with that)
this.myForm = this.formBuilder.group({
firstName: [data.firstName, [Validators.required]],
lastName: [data.lastName, [Validators.required]]
});
}
第二种方法:
在这种方法中,您可以使用 [(ngModel)]
自动绑定它,因此您无需在组件文件中执行任何操作。
ngOnInit() {
// Imagine that the data is coming from API:
this.referringData = { firstName: 'First', lastName: 'Last'};
// init the form as always
}
并在模板中使用 [(ngModel)] 来 绑定 值 :
<input type="text" formControlName="firstName" [(ngModel)]="referringData.firstName">
<input type="text" formControlName="lastName" [(ngModel)]="referringData.lastName">
检查上述两种方法的完整来源。
注:
虽然没有任何地方说你不能同时使用 FormsModule
和 ReactiveFormsModule
,但我不会这样做,我更愿意使用第一种方法。
绑定fromControl的动态值或替换值,我们可以使用patchValue方法。
HTML Code :
<mat-form-field appearance="outline">
<mat-label>Email</mat-label>
<input matInput formControlName="email" >
<mat-icon matSuffix class="secondary-
text">mail</mat-icon>
</mat-form-field>
Component Code :
ngOnInit () {
/** This create form group */
this.resetPasswordForm =
this._formBuilder.group({
email:new FormControl({ value: '', disabled:true }),
});
this.updateEmail()
}
updateEmail(){
/** Update value of formControl */
this.resetPasswordForm.patchValue({
email: 'any@any.com'
});
}