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.valuedisabled 控件将从表单中完全消失。当您使用Form Builder 构建表单时,您需要有某种标志(可以像相应控件的属性是否具有值一样简单)来检查 我在初始化时只构建一次FormGroup。 【参考方案1】:

我找到了一个(肮脏的)解决方法。

我在.subscribe 块之前添加了.debounceTime(0),并且在我将新值修补到表单中之后,复选框会暂时启用,但会立即再次禁用。

【讨论】:

以上是关于FormGroup.patchValue 保持子控件的禁用状态的主要内容,如果未能解决你的问题,请参考以下文章

clipChildren属性

clipChildren属性

EVT_SIZE 窗口修改事件

iOS基础之顺传逆传传值(delegateblock)

31例程启动后需要会话进行保持吗

你是如何保持身材的?