Angular 角度2禁用的控件不包含在form.value中
我注意到,如果我在Angular 2被动窗体上禁用控件,则该控件不会包含在form.value中。例如,如果我像下面这样定义我的表单:Angular 角度2禁用的控件不包含在form.value中,angular,angular2-forms,Angular,Angular2 Forms,我注意到,如果我在Angular 2被动窗体上禁用控件,则该控件不会包含在form.value中。例如,如果我像下面这样定义我的表单: this.notelinkingForm = new FormGroup({ Enabled: new FormControl(settings.Enabled, Validators.required), LinkToPreceeding: new FormControl({value: settings.LinkToPreceeding, d
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}
但是,当某些控件被禁用时,它将是:
{"Enabled":true, "LinkToPreceeding": true, LinkingTolerance:"100"}
{"Enabled":true}
请注意如何排除禁用的控件
我的意图是,当表单发生更改时,我希望能够将form.value及其所有属性传递给rest API。如果它不包含已禁用的项,则显然无法执行此操作
我是否遗漏了什么,或者这是预期的行为?有没有办法告诉Angular在form.value中包含禁用的项
欢迎您的想法。您可以使用:
this.notelinkingForm.getRawValue()
发件人:
如果希望包括所有值,而不考虑禁用状态,请使用此方法。否则,value
属性是获取组值的最佳方法
我使用的另一个选项是:
this.form.controls['LinkToPreceeding'].value代码>谢谢你给我80%的所需
对于那些正在寻找解决同一问题的方法,但对于嵌套表单,我可以通过改变我通常的方法来解决
this.notelinkingForm.get('nestedForm').value
到
如果使用readonly
而不是disabled
,当数据将包含在表单中时,它仍然不可编辑。但这并非在所有情况下都是可能的。例如,单选按钮和复选框不可用。看见在这种情况下,您必须申请此处提供的其他解决方案。想知道Angular团队究竟为什么这么做this@inorganik他们这样做是因为可以启用禁用的控件并编辑其值。在本例中,getRawValue()将返回一个具有篡改值的对象。这实际上是一件好事。例如,我知道禁用控件的值不会更改,因此我不想将它们包含在save API中,因为我首先从数据库中为这些控件分配了一个值。但在某些情况下,我确实希望包括那些从前端分配值的控件,它们不存储在DB中,这个函数涵盖了它。两个选项都有总是好的。这是真的@ChiragMS。我喜欢这方面,只要我可以在只读
和禁用
之间进行选择。但我在下面的回答中描述的复选框和单选按钮并非如此。在这些情况下,我不喜欢以不同的方式获取数据,并专门为这种情况编写代码。因为有人可能会篡改它,所以“删除”值是毫无意义的。永远不要信任客户端数据。您应该总是期望有人篡改您的数据,并在服务器端重新检查它。这只是另一个令人烦恼的问题。此外,即使使用getRawValue(),Angular 11也不包括禁用的值。