我有一个自定义表单控件,它实现ControlValueAccessor. 我用一个值初始化反应表单组和控件。我想在控制组件内部改变该值,并让外部形式获得该突变值。
onChange()当我与控件交互并通过 UI 设置新值时,这可以很好地发出事件,但是初始值(通过 设置FormBuilder)在内部更改时不会触发form.valueChanges事件,因此表单永远不会具有修改后的值您永远不会通过 UI 更改控件的值。
我想出如何确保表单看到变异值的唯一方法是将 a 包裹setTimeout在this.onChange(this.value)调用周围,这似乎是错误的。试图弄清楚是否有人尝试过这个并找到比 更好的解决方案setTimeout?
这是一个非常精简的 stackblitz 来展示场景:https ://stackblitz.com/edit/angular-t28bst?file=src%2Fapp%2Fform-control%2Fform-control.component.ts
您可以看到内部的值是“hello world”,而外部的表单仅显示“hello”,除非您单击控件内的 Update Value 按钮(仅设置value = value)然后表单会看到它。或者,您可以取消注释setTimeout周围的onChange()呼叫,看看它也有效。