Jim*_*ell 88 angular2-forms angular
我注意到如果我禁用Angular 2反应形式的控件,那么控件不会包含在form.value中.例如,如果我定义我的表单如下:
this.notelinkingForm = new FormGroup({
Enabled: new FormControl(settings.Enabled, Validators.required),
LinkToPreceeding: new FormControl({value: settings.LinkToPreceeding, disabled: !settings.Enabled}, Validators.required),
LinkingTolerance: new FormControl({value: settings.LinkingTolerance, disabled: !settings.Enabled}, Validators.required)
});
Run Code Online (Sandbox Code Playgroud)
并检查this.notelinkingForm.value,如果启用了所有控件,则输出将为:
{"Enabled":true, "LinkToPreceeding": true, LinkingTolerance:"100"}
Run Code Online (Sandbox Code Playgroud)
但是,当某些控件被禁用时,它将是:
{"Enabled":true}
Run Code Online (Sandbox Code Playgroud)
请注意如何排除禁用的控件.
我的意图是,当表单更改时,我希望能够将form.value与其中的所有属性一起传递给我的rest API.如果它不包含禁用的项目,这显然是不可能的.
我在这里遗漏了什么或这是预期的行为吗?有没有办法告诉Angular在form.value中包含禁用的项目?
欢迎你的想法.
Sas*_*sxa 182
您可以使用:
this.notelinkingForm.getRawValue()
Run Code Online (Sandbox Code Playgroud)
来自docs:
如果您想要包括所有值而不管禁用状态,请使用此方法.否则,该
value属性是获取组值的最佳方式.
感谢@Sasxa为我提供了 80% 的需求。
对于那些正在寻找相同问题的解决方案但对于嵌套表单的人,我可以通过改变我的习惯来解决
this.notelinkingForm.get('nestedForm').value
Run Code Online (Sandbox Code Playgroud)
到
this.notelinkingForm.getRawValue().nestedForm
Run Code Online (Sandbox Code Playgroud)