2017-04-11 5 views
5

Ich muss ein Array von Objekten an den benutzerdefinierten Custom Validator übergeben und dann möchte ich den Wert des Vorlage getrieben Formularfeld gegen die Datensätze in diesem Array validieren.Winkel 2 Pass-Array zu benutzerdefinierten Validator (Template-gesteuerte Formular)

Allerdings kann ich das Objekt im Validator nicht abrufen.

Das einzige, was ich sehen kann, ist der Name als String.

Jede Hilfe wird freundlich geschätzt.

<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; 
    } 

} 
+0

'@Attribute ('krediTuruValidator')' ist ein 'string' Wert zurück, ich denke, Sie es zu JSON zu analysieren haben, bevor tun' this.krediTuruValidator [0] .krediTuru' –

+0

Danke für die rasche response.JSON.parse (this.krediTuruValidator) gibt einen Fehler aus, der besagt, dass das Argument vom Typ Kredi [] nicht der Zeichenfolge zugewiesen werden kann. – desperado06

Antwort

1

ich dieses Problem gelöst, indem die Validierungsfunktion auf eine andere Methode in der Komponente zu delegieren. So kann ich auf jedes gewünschte Objekt zugreifen

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); 
    } 

} 

Wie kann ich auf die Vorlage zugreifen?

<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

In der Vorlage denke ich, dass Sie [krediVadeSayisiValidator] = "validateKrediVadeSayisi" (ohne Klammern) haben müssen. Gute Lösung. – Koja

Verwandte Themen