настраиваемые компоненты формы доступа к проверке

Я хочу сделать пользовательскую проверку для angular2. Эта проверка должна обращаться к другому компоненту формы. Это возможно?

Мой шаблон

<input type="tekst" id="startDate" name="startDate" [(ngModel)]="model.startDate" #startDate="ngModel" >

<input type="tekst" id="endDate" name="endDate" [(ngModel)]="model.endDate" #endDate="ngModel" customValidator>

Мой валидатор

...
@Directive({
    selector: '[customValidator][ngModel][customValidator][formControl]',
    providers: [
        provide : NG_VALIDATORS,
        useExisting : forwardRef(() = > CustomValidator),
        Multi : true
    }]
})

export class CustomValidator impelments Validator {
    constructor(){}

    validate(c : FormControl) : {[key : string] : any} {

        // HOW TO ACCESS startDate CONTROL HERE? OR ITS VALUE? OR THE MODEL
    }

person lordkain    schedule 24.04.2018    source источник
comment
Да, возможно, вы можете обновить файл модуля   -  person Robert    schedule 24.04.2018


Ответы (2)


Если вы хотите реализовать перекрестную проверку, вы должны переместить проверку в элемент управления-предок.

Тогда ваш метод проверки может выглядеть так:

validate(fg: FormGroup) {
  const start = fg.get('startDate').value;
  const end = fg.get('enDate').value;

  return start !== null && end !== null && start < end 
   ? null 
   : { range: true };
};

Подробнее о перекрестной проверке читайте здесь.

person Tomasz Kula    schedule 24.04.2018
comment
у вас есть пример, как это сделать с шаблоном формы. Так поставить валидатор в html контрол ‹ input.. customValidator › и без формбилдера в машинописи? - person lordkain; 24.04.2018

Вам может понравиться

@Directive({
    selector: '[customValidator][ngModel][customValidator][formControl]',
    providers: [
        provide : NG_VALIDATORS,
        useExisting : forwardRef(() = > CustomValidator),
        Multi : true
    }]
})

export class CustomValidator impelments Validator {
    constructor(){}

    validate(c : FormControl) : {[key : string] : any} {
         let control_value= c.value;
        // HOW TO ACCESS startDate CONTROL HERE? OR ITS VALUE? OR THE MODEL
    }

также ссылайтесь на эту ссылку: пользовательский валидатор и пользовательский валидатор с обратное соответствие

person Robert    schedule 24.04.2018
comment
Я хочу получить доступ к другому элементу управления здесь. Если я сделаю c.root.get('control') это тоже null - person lordkain; 24.04.2018
comment
scotch.io/ учебники/ - person Robert; 24.04.2018
comment
проверьте приведенные выше ссылки - person Robert; 24.04.2018
comment
привет, Роберт, спасибо за ответ, только если я сделаю код, пусть e = c.root.get(this.validateEqual); это приводит к нулю - person lordkain; 24.04.2018