在自定义验证器指令中注入ngControl会导致循环依赖

时间:2016-10-01 16:42:55

标签: angular angular2-directives

我试图创建自定义的角度2验证器指令,它会像这样注入NgControl:

@Directive({
  selector: '[ngModel][customValidator]',
  providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]
})
export class CustomValidatorDirective implements Validator {
  private validateFunction: ValidatorFn;

  constructor(private control: NgControl) { };

}

但我收到以下错误:

  

无法实例化循环依赖! NgControl

有谁知道我如何处理它,所以我可以在初始化后访问ngControl?

2 个答案:

答案 0 :(得分:7)

您可以通过Injector注入NgControl以避免循环依赖。

constructor(private _injector: Injector) { }

ngOnInit() {
  console.log(this._injector.get(NgControl))
}

答案 1 :(得分:2)

提供商,管道,指令声明已从 @Compone nt @Directi ve中删除 RC6 RC7 之后的装饰器。所以你只需要删除

providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}] 
来自指令

并将其添加到 @NgModule({})装饰器

@NgModule({
 ...
 providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]

})