Angular2 – 为FormBuilder控件手动设置值
这使我疯狂,我在枪口下,不能再花一整天的时间在这个上面。
我试图在组件内手动设置一个控制值('dept'),它只是不工作 – 即使是新的值logging到正确的控制台。
这里是FormBuilder实例:
initForm() { this.form = this.fb.group({ 'name': ['', Validators.required], 'dept': ['', Validators.required], 'description': ['', Validators.required], }); }
这是接收选定部门的事件处理程序:
deptSelected(selected: { id: string; text: string }) { console.log(selected) // Shows proper selection! // This is how I am trying to set the value this.form.controls['dept'].value = selected.id; }
现在当表单被提交时,我注销了这个表单,这个表单仍然是空的! 我见过其他人使用updateValue()
但这是beta.1,我不认为这是一个有效的方法调用控件。
我也试图调用updateValueAndValidity()
没有成功:(。
我只是在表单元素上使用ngControl="dept"
,就像我正在处理表单的其余部分,但是它是一个自定义的指令/组件。
<ng-select [data]="dept" [multiple]="false" [items]="depts" (selected)="deptSelected($event)" <!-- This is how the value gets to me --> [placeholder]="'No Dept Selected'"></ng-select>
更新date:19/03/2017
this.form.controls['dept'].setValue(selected.id);
旧:
现在我们被迫做一个types转换:
(<Control>this.form.controls['dept']).updateValue(selected.id)
不是很优雅,我同意。 希望这在未来的版本中得到改进。
在Angular 2 Final(RC5 +)中有更新表单值的新API。 patchValue()
API方法支持部分表单更新,我们只需要指定一些字段:
this.form.patchValue({id: selected.id})
还有一个setValue()
API方法需要一个包含所有表单字段的对象。 如果有一个字段丢失,我们会得到一个错误。
angular2最终更新了那里的API。 他们为此增加了许多方法。
为了更新从控制器的forms控制器做到这一点
this.form.controls['dept'].setValue(selected.id); this.form.controls['dept'].patchValue(selected.id);
不需要重置错误
引用
https://angular.io/docs/ts/latest/api/forms/index/FormControl-class.html
https://toddmotto.com/angular-2-form-controls-patch-value-set-value
你可以试试这个:
deptSelected(selected: { id: string; text: string }) { console.log(selected) // Shows proper selection! // This is how I am trying to set the value this.form.controls['dept'].updateValue(selected.id); }
有关更多详细信息,可以查看关于updateValue
方法的第二个参数的相应JS文档: https : //github.com/angular/angular/blob/master/modules/angular2/src/common/forms/model 。 #L269 。
希望能成为你,Thierry
let cloneObj = Object.assign({}, this.form.getRawValue(), someClass); this.form.complexForm.patchValue(cloneObj);
如果你不想手动设置每个字段。
@ Filoche的Angular 2更新解决scheme。 使用FormControl
(<Control>this.form.controls['dept']).updateValue(selected.id)
import { FormControl } from '@angular/forms'; (<FormControl>this.form.controls['dept']).setValue(selected.id));
或者,您可以使用@ AngularUniversity的解决scheme ,它使用patchValue