Angular 2 pass array to custom validator (template driven form)

I need to pass an array of objects to an arbitrary a2 validator, and then I would like to check the value of the form-driven form field for the entries in this array.

However, I cannot get the object inside the validator.

The only thing I see is his name as a string.

Any help is welcome.

<label class="btn btn-default btn-sm" [(ngModel)]="krediHesaplamaModel.radioModelKrediTur" name="krediHesaplamaModel.radioModelKrediTur" btnRadio="0" (click)="onRadioButtonKrediHesaplamaTurChange()" krediTuruValidator="this.krediList" > 

 import { Directive, forwardRef, Attribute } from '@angular/core'; import { Validator, AbstractControl, NG_VALIDATORS } from '@angular/forms'; import {Kredi} from '../kredi'; @Directive({ selector: '[krediTuruValidator][formControlName],[krediTuruValidator][formControl],[krediTuruValidator][ngModel]', providers: [{ provide: NG_VALIDATORS, useExisting: forwardRef(() => KrediTuruValidator), multi: true }, ] }) export class KrediTuruValidator implements Validator { constructor( public krediTuruValidator: Kredi[]) { } validate(c: AbstractControl): { [key: string]: any } { console.log('KL' + this.krediTuruValidator[0].krediTuru); //UNDEFINED let v = c.value; return null; } } 
+5
source share
1 answer

I solved this problem by delegating the check function to another method in the component. That way I can access any object I want.

 import { Directive, forwardRef, Attribute, Input } from '@angular/core'; import { Validator, ValidatorFn, AbstractControl, NG_VALIDATORS } from '@angular/forms'; @Directive({ selector: '[krediVadeSayisiValidator][formControlName],[krediVadeSayisiValidator][formControl],[krediVadeSayisiValidator][ngModel]', providers: [{ provide: NG_VALIDATORS, useExisting: forwardRef(() => KrediVadeSayisiValidator), multi: true },] }) export class KrediVadeSayisiValidator implements Validator { @Input() krediVadeSayisiValidator: ValidatorFn; //same name as the selector validate(c: AbstractControl): { [key: string]: any } { return this.krediVadeSayisiValidator(c); } } 

How do I access it inside the template?

  <input type="number" class="form-control" name="krediVadeSayisi" [(ngModel)]="krediHesaplamaModel.krediVadeSayisi" #krediVadeSayisi="ngModel" required maxlength="2" [krediVadeSayisiValidator]="validateKrediVadeSayisi()" /> /*this function is inside the component*/ 
+1
source

Source: https://habr.com/ru/post/1266579/


All Articles