2017-04-11 52 views
5

我需要傳遞一個對象數組到a2自定義驗證器,然後我想驗證模板驅動的表單字段的值與該數組中的記錄的值。角2傳數組到自定義驗證器(模板驅動的形式)

但是我無法檢索驗證器中的對象。

我能看到的唯一的東西就是它的名字。

任何幫助,慷慨讚賞。

<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')'返回一個'string'價值,我想你必須先在做之前,它解析爲JSON'this.krediTuruValidator [0] .krediTuru' –

+0

感謝您的迅速response.JSON.parse(this.krediTuruValidator)會拋出一個錯誤,指出類型Kredi []的參數不能分配給字符串。 – desperado06

回答

1

我通過委派驗證功能,在組件的另一種方法解決這個問題。這樣我就可以訪問我想要的任何對象

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

} 

如何在模板內訪問它?

<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

在模板中,我認爲你需要[krediVadeSayisiValidator] =「validateKrediVadeSayisi」(沒有括號)。不錯的解決方案。 – Koja