Angular2反应性表单-使用下拉菜单为表单字段设置默认值 [英] Angular2 Reactive forms - Set default value for form fields with dropdown
本文介绍了Angular2反应性表单-使用下拉菜单为表单字段设置默认值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何设置角度2反应形式中所有形式字段的默认值?
How can I set the default value for all forms fields in angular 2 reactive forms?
这是 plnkr 重现该问题
下面的代码不会更新下拉列表值,因为它具有与之关联的对象.
Below code does not update dropdown values as it has an object associated with it.
注意:在这里,我需要使用从后端API收到的响应为所有表单字段设置默认值.
Note: Here I need to set the default value for all form fields with the response received from Backend API.
Component.html
Component.html
<form [formGroup]="myForm" novalidate (ngSubmit)="save(myForm.value, myForm.valid)">
<div class="form-group">
<label>Country:</label>
<select formControlName="country">
<option *ngFor="let country of masterCountries" [ngValue]="country">{{country.countryName}}</option>
</select>
</div>
<div class="form-group">
<label for="">Name</label>
<input type="text" class="form-control" formControlName="name">
<small [hidden]="myForm.controls.name.valid || (myForm.controls.name.pristine && !submitted)" class="text-danger">
Name is required (minimum 5 characters).
</small>
<!--<pre class="margin-20">{{ myForm.controls.name.errors | json }}</pre>-->
</div>
<button type="submit" class="btn btn-default">Submit</button>
<div class="margin-20">
<div>myForm details:-</div>
<pre>Is myForm valid?: <br>{{myForm.valid | json}}</pre>
<pre>Is myForm submitted?: <br>{{submitted | json}}</pre>
<pre>myForm value: <br>{{myForm.value | json}}</pre>
</div>
Component.ts
Component.ts
export class AppComponent implements OnInit {
public myForm: FormGroup;
public masterCountries: any[] = [{"countryCode":"AF","countryName":"Afghanistan"},{"countryCode":"AL","countryName":"Albania"},{"countryCode":"DZ","countryName":"Algeria"},{"countryCode":"AS","countryName":"American Samoa"},{"countryCode":"AD","countryName":"Andorra"}];
// Sample response received from backend api
public CountryResponse = {country: {"countryCode":"AF","countryName":"Afghanistan"}, name: 'test123'};
constructor(private _fb: FormBuilder) { }
ngOnInit() {
// the short way
this.myForm = this._fb.group({
country: [''],
name: ['', [<any>Validators.required, <any>Validators.minLength(5)]],
});
(<FormGroup>this.myForm)
.setValue(this.CountryResponse, {onlySelf: true});
}
save(model: User, isValid: boolean) {
this.submitted = true;
console.log(model, isValid);
}
}
让我知道是否还有其他方法可以设置整个表格.
Let me know if there is any other way to set the whole form.
推荐答案
只需更改此内容:
(<FormGroup>this.myForm)
.setValue(this.CountryResponse, {onlySelf: true});
对此:
const selectedCountry = this.masterCountries.find(country => country.countryCode === this.CountryResponse.country.countryCode)
this.CountryResponse.country = selectedCountry;
(<FormGroup>this.myForm)
.setValue(this.CountryResponse, {onlySelf: true});
如前所述,您需要传递与对象完全相同的引用
As said before you need to pass the exact same reference of the object
这篇关于Angular2反应性表单-使用下拉菜单为表单字段设置默认值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文