Kil*_*are 4 angular2-forms angular2-formbuilder angular
我有一个选择列表,我想将其初始化为从服务器返回的保存值。但是,无论我尝试什么,都无法使用所选的值。
我正在使用Angular 2.2.0和Reactive Forms。
这是选择列表的值列表。
private categoryList: ICategory[] = [
new Category({ id: 1, name: 'Cat 1' }),
new Category({ id: 2, name: 'Cat 2' }),
new Category({ id: 3, name: 'cat 3' })
];
Run Code Online (Sandbox Code Playgroud)
保存的值为:
{ id: 1, name: 'Cat 1' }
Run Code Online (Sandbox Code Playgroud)
使用FormBuilder创建表单
this.itemForm = this.fb.group({
name: [null, Validators.required],
description: [null, Validators.required],
weight: [null, Validators.required],
dimensions: [null, Validators.required],
category: [null, Validators.required]
});
Run Code Online (Sandbox Code Playgroud)
然后用保存的数据初始化
(<FormGroup>this.itemForm)
.setValue({
name: item.name,
description: item.description,
weight: item.weight,
dimensions: item.dimensions,
category: item.category
}, { onlySelf: true });
Run Code Online (Sandbox Code Playgroud)
模板看起来像这样
<select name="category" [formControl]="itemForm.controls['category']">
<option [selected]="itemForm.controls['category'].value == null" value="">-- Select --</option>
<option *ngFor="let cat of categories" [ngValue]="cat">
{{cat.name}}
</option>
</select>
{{itemForm.controls['category'].value | json }}
Run Code Online (Sandbox Code Playgroud)
预期结果 在选择中选择了第一项的名称,该名称与模板下显示的JSON中的文本匹配
实际行为 JSON显示如下:
{ "id": 1, "name": "Cat 1" }
Run Code Online (Sandbox Code Playgroud)
但是在选择中什么也没有选择
如果选择了--Select-,JSON将正确更新为“”。
如果选择了另一只猫,JSON也将正确更新。
我在做什么错,如何初始化选择?
编辑我也尝试过这个:
<option *ngFor="let cat of categories" [selected]="itemForm.controls['category'].value.id == cat.id" [ngValue]="cat">
Run Code Online (Sandbox Code Playgroud)
如果我对您的理解正确,那么您想设置一个默认值。然后,您可以只引用item.category您要设置的值的索引。
我将这样设置值,我们将第一项设置为默认值。
setValues() {
this.itemForm
.setValue({
name: item.name,
category: item.category[0].id
})
}
Run Code Online (Sandbox Code Playgroud)
然后使用formGroup和formControlName形式,因此:
<form [formGroup]="itemForm">
<input formControlName="name"/>
<small *ngIf="!itemForm.controls.name.valid">Name is required!</small>
<!-- More code -->
<select formControlName="category">
<! -- set ngValue to cat.id --> instead of just cat!
<option *ngFor="let cat of categories" [ngValue]="cat.id">
{{cat.name}}
</option>
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
将[ngValue](或仅使用[value])设置为cat.name或cat.id取决于您要使用的内容,因此,如果使用ngValue,则不会绑定整个对象!
这是一个正在工作的柱塞。不知道在哪里设置这些值,在这一点上,我在setValues插棒中做了一个- 按钮,用来模仿以后是否设置这些值。
希望有帮助!
| 归档时间: |
|
| 查看次数: |
8006 次 |
| 最近记录: |