Angular2中的自定义指令的NgControl

时间:2016-03-29 11:38:25

标签: angular web-component angular2-template angular2-directives angular2-forms

我正在尝试在自定义组件上使用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)。

有关此的任何建议。

1 个答案:

答案 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 {
  (...)
}