什么是registerOnTouched?

ube*_*001 7 angular

创建使用自定义表单元素时,ngModel必须提供一个元素NG_VALUE_ACCESSOR,这又需要组件实现ControlValueAccessor,该元素具有一种称为的方法registerOnTouched。所有angular.io文档都说的是:

registerOnTouched(fn: any) : void
Run Code Online (Sandbox Code Playgroud)

设置控件收到触摸事件时要调用的函数。

Angular文档听起来像是用于触摸输入,但是我认为这是ngForm查看用户是否曾经与输入进行交互的方式的一部分。文档似乎缺少一些有关“触摸事件”以及应该如何从组件外部注册和使用“ onTouch”处理程序的信息。

这到底是为了什么?如何使用?谁提供的fn?...使用我的组件((touched)="handler()")或仅使用Angular本身的开发人员?我看过一些示例,它们只是注册一个处理程序,然后从不调用或忽略它。如果是这样,为什么我需要完全实现它?

“触摸事件”的端到端示例可能会清除所有这些。

ube*_*001 7

创建一个问题,并且registerOnTouched 的文档已更改:

注册一个回调函数,当控件接收到模糊事件时应调用该回调函数。

这在初始化时由表单 API 调用,因此它可以在模糊时更新表单模型。

...

请参阅registerOnTouched 的文档

注册触摸处理程序会导致在自定义输入上ngForm正确设置ng-touched类和ng-untouched类。这是一个关于plunker的例子。

我不确定触摸事件由什么组成,也不知道在触摸自定义输入时直接检查或收听的方法。