我正在尝试在自定义组件上使用ngControl。我创建了组件并在组件上实现了ControlValueAccessor
。
然后在构造函数中,NgControl注入如下:
constructor(@Self() private ngControl: NgControl){
this.ngControl.valueAccessor = this;
}
但是当我在选择器上使用ngControl时,表单类(ng-pristine , ng-touched, ng-invalid
)不会更新,也不能检查表单元素的值。
任何人都可以帮助我做错了。
添加问题描述 我尝试Thierry Templier解决方案,因为angular2中的知识有限,但我遇到了循环引用错误。
在问题中详细说明,我在MyComponent
中使用了ContainerComponent
组件,当我在容器组件中使用ngControl
时,我会使用Thierry Templier描述的更改,发送到MyComponent
,我得到循环引用错误,例如:(MyComponent -> ngControl ..... -> token** -> MyComponent
)。
有关此的任何建议。
答案 0 :(得分:1)
实际上,您需要将值访问器注册到组件的提供程序中。请注意,它本身可以是:组件是值访问器,需要在其提供者中自行注册)。实际上,这种情况forwardRef
很有帮助。
类似的东西:
const CUSTOM_VALUE_ACCESSOR = new Provider(
NG_VALUE_ACCESSOR, {useExisting: forwardRef(() => LabelsValueAccessor), multi: true});
@Component({
(...)
providers: [CUSTOM_VALUE_ACCESSOR]
})
export class LabelsValueAccessor implements ControlValueAccessor {
(...)
}