FormGroup.patchValue 保持子控件的禁用状态
Posted
技术标签:
【中文标题】FormGroup.patchValue 保持子控件的禁用状态【英文标题】:FormGroup.patchValue keep disabled state of child controls 【发布时间】:2018-06-18 19:52:48 【问题描述】:我有一个带有禁用表单控件的反应式FormGroup
实例。
表单控件之一上的 valueChanges 侦听器设置其他控件disabled
。
每次我将表单的值保存到后端时,都会返回一个更新的对象,并使用patchValue
将其修补回表单中。
不幸的是,在将新对象从后端修补到表单组后,所有控件的禁用状态都丢失了。
-
我在初始化时创建了 FormGroup
用户输入的一些值(例如 URL)会导致其他表单控件被禁用。
我保存了表单的值
我从后端收到更新的对象
我将更新的对象修补到表单中。
之前禁用的表单控件再次启用。
使用patchValue
后如何保持表单控件的禁用状态?
【问题讨论】:
您知道(或后端知道)应该禁用哪个控件的标志是什么? 这些控件在保存之前已经被禁用(因此修补)。我只是希望控件保持禁用状态。 如果您提交form.value
,disabled
控件将从表单中完全消失。当您使用Form Builder
构建表单时,您需要有某种标志(可以像相应控件的属性是否具有值一样简单)来检查
我在初始化时只构建一次FormGroup。
【参考方案1】:
我找到了一个(肮脏的)解决方法。
我在.subscribe
块之前添加了.debounceTime(0)
,并且在我将新值修补到表单中之后,复选框会暂时启用,但会立即再次禁用。
【讨论】:
以上是关于FormGroup.patchValue 保持子控件的禁用状态的主要内容,如果未能解决你的问题,请参考以下文章