首页 文章

Angular 2禁用控件不包含在form.value中

提问于
浏览
64

我注意到如果我禁用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)
});

并检查this.notelinkingForm.value,如果启用了所有控件,则输出将为:

{"Enabled":true, "LinkToPreceeding": true, LinkingTolerance:"100"}

但是,当某些控件被禁用时,它将是:

{"Enabled":true}

请注意如何排除禁用的控件 .

我的意图是,当表单更改时,我希望能够将form.value与其中的所有属性一起传递给我的rest API . 如果它不包含禁用的项目,这显然是不可能的 .

我在这里遗漏了什么或这是预期的行为吗?有没有办法告诉Angular在form.value中包含禁用的项目?

欢迎你的想法 .

3 回答

  • 2

    您可以使用:

    this.notelinkingForm.getRawValue()
    

    来自docs

    如果您想要包括所有值而不管禁用状态如何,请使用此方法 . 否则,value属性是获取组值的最佳方式 .

  • 125

    我使用的另一个选择是:

    this.form.controls['LinkToPreceeding'].value;

  • 3

    谢谢@Sasxa给我80%的收益 .

    对于那些寻找相同问题的解决方案但是对于嵌套表单的人我能够通过改变我的惯常来解决

    this.notelinkingForm.get('nestedForm').value
    

    this.notelinkingForm.getRawValue().nestedForm
    

相关问题