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

Injecting ngControl in custom validator directive, causes cyclic dependency

我正在尝试创建自定义 angular 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) { };

}

但是我收到以下错误:

Cannot instantiate cyclic dependency! NgControl

有谁知道我该如何解决它,以便我可以在初始化后访问 ngControl?

Providers、Pipes、Directives 声明已从 @Component@Directive装饰器在RC6RC7之后。所以你只需要删除

providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}] 

来自指令

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

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

})

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

constructor(private _injector: Injector) { }

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