为什么我需要在组件级别提供NG_VALUE_ACCESSOR?

时间:2018-01-03 21:56:09

标签: angular angular-forms

看一下这个例子:

What has been installed

它不起作用。

但如果我将providers@NgModule移到HelloComponent,它确实有效。为什么?不应该在@NgModule级别或@Component级别提供相同的内容吗?

1 个答案:

答案 0 :(得分:2)

因为NG_VALUE_ACCESSOR绑定到组件的:host并且链接到方法(ControlValueAccessor方法)。您的模块没有任何这些表单方法(如writeValue,registerOnTouched等)。你的表单元素。因此,在组件级别提供将该特定元素绑定。此外,提供如此深层次意味着每个表单控件都有自己的控件值访问器而不是共享控件。

Angular Form控件及其API与DOM表单控件不同。角度的作用是与dom元素的输入/输出相关联,并为您提供结果。现在,使用自定义控件,您必须在那里提供相同的绑定。通过实施ControlValueAccessor并提供NG_VALUE_ACCESSOR,您可以告诉Angular的Forms API如何从/向您的自定义表单控件读取和写入值。

查看source