Angular2自定义表单控件防止发射事件

Posted

技术标签:

【中文标题】Angular2自定义表单控件防止发射事件【英文标题】:Angular2 custom form control prevent emitting event 【发布时间】:2017-06-24 23:40:12 【问题描述】:

在某些情况下,当我更新 Angular2 表单控件时,我不想触发 valueChanges 事件(例如,因为更改来自我的数据库,并且不应触发数据库写入以避免无限循环)。

这对使用“emitEvent”属性的标准 FormControl 非常有效,如下所示:

this.form.formGroup.controls[name].setValue(value, emitEvent: false);

现在我有一个案例,我想在我创建的自定义 FormControl 上使用该“功能”,通过 registerOnChange()writeValue() 方法实现“ControlValueAccessor”。

但我不知道如何访问 emitEvent 属性,因为它不是 writeValue() 中的传入参数

有没有办法做到这一点?谢谢!

【问题讨论】:

【参考方案1】:

这不是它的工作原理,writeValue 是 Angular 用来更新您的自定义组件的,而不是相反。控件使用传递给registerOnChange 的函数进行更新,但是这是用于通过组件的 UI 更新值,如果不发出事件就无法完成,实际上没有这种情况。如果您详细说明您的情况,我们可以尝试解决。如果你想防止额外的保存请求,你可以添加去抖动机制或使用 Angular FormHooks——'blur' 只会在你离开 UI 元素后更新控件。

【讨论】:

以上是关于Angular2自定义表单控件防止发射事件的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 - 自定义表单控件 - 禁用

Angular 2 - 单元测试绑定到嵌套的自定义表单控件

Angular 2 自定义表单输入

在 Angular2 ngModel 值未在自定义指令的 onBlur 事件上更新

C#自定义控件内多个控件的单击事件

为自定义控件实现值访问器时,未从事件中的模型获取更新值