angularangular2-directives

Injecting ngControl in custom validator directive, causes cyclic dependency


i'm trying to create custom angular 2 validator directive, which inject NgControl like this :

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

  constructor(private control: NgControl) { };

}

But i get the following error:

Cannot instantiate cyclic dependency! NgControl

Does anyone know how i can workarround it, so i can access the ngControl after intialization?


Solution

  • Providers, Pipes, Directives declaration are removed from @Component or @Directive decorators after RC6 or RC7. So you just need to remove

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

    from directive

    and add it into @NgModule({}) decorator

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