Валидатор не получает все значения перед запуском логики - PullRequest
0 голосов
/ 05 июля 2019

Я написал собственный валидатор, чтобы получить 2 значения даты из группы форм и сравнить их. Кажется, что когда этот валидатор запускает последнее значение, необходимое для логики, оно не обновляется вовремя, прежде чем логика попытается запустить.

У меня console.log, и весь валидатор попытался найти проблему, похоже, проблема в проверке достоверности последнего необходимого значения.

Пользовательский валидатор:

// Validate Effective Date Vs. Termination Date
    valEffDateTermDate(c: AbstractControl): { [key: string]: boolean } | null {
        let effDate = c.get('effectiveDate').value;
        let termDate = c.get('terminationDate').value;
        let dateRegex = /(?:0[1-9]|[1-2][0-9]|3[0-1])\/(?:0[1-9]|1[0-2])\/(?:19\d\d|20\d\d|99\d\d)/g;
        let isValidEffDate = dateRegex.test(effDate);
        let isValidTermDate = dateRegex.test(termDate);
        if (effDate.length === 10 && termDate.length === 10 && isValidEffDate === true && isValidTermDate === true) {
            console.log('Initial Criteria Met');
            if (new Date(effDate).toISOString() >= new Date(termDate).toISOString()) {
                console.log('Setting effDateTermDate to true');
                return { effDateTermDate: true};
            }
            return null;
        }
        return null;
    }

Настройка FormBuilder:

 // Angular FormBuilder Construction and Initialization
    this.createCodeForm = this.fb.group({
      codeName: ['', [  Validators.required,
                        Validators.pattern('^[a-zA-Z0-9]*$'),
                        this.v.valCodeName(this.selectedDisplayedName) ]],
      codeSetName: this.selectedCSName,
      codeSubSetName: this.selectedCSSubName,
      createCodeDates: this.fb.group({
        effectiveDate: ['', [ Validators.required,
                              this.v.valDate,
                              this.v.valEffDateCSEffDate(this.selectedEffDate)
                            ]],
        terminationDate: ['', [ Validators.required,
                               this.v.valDate,
                                this.v.valTermDateCSTermDate(this.selectedTermDate)]],
        systemEffectiveDate: ['', [ Validators.required,
                                   this.v.valDate,
                                    this.v.valSysEffDateCSSysEffDate(this.selectedSysEffDate)]],
        systemTerminationDate: ['', [ Validators.required,
                                      this.v.valDate,
                                      this.v.valSysTermDateCSSysTermDate(this.selectedSysTermDate)]],
      }, { validator: Validators.compose([this.v.valEffDateTermDate,
                                          this.v.valEffDateSysTermDate,
                                          this.v.valTermDateSysTermDate,
                                          this.v.valSysEffDateSysTermDate])}
      ),
      typeCode: '',
      classification: '',
      subClassification: '',
      copayCode: ['' , [ this.v.valCopayCode(this.selectedDisplayedName) ]],
      shortDescription: ['', [Validators.required, Validators.maxLength(100)]],
      longDescription: ['', [Validators.required, Validators.maxLength(500)]],
      comments: ['', [Validators.maxLength(300)]]
    });
  }

Ожидаемые результаты для valEffDateTermDate после того, какffectiveDate и termDate имеют длину === 10 и действительны для регулярного выражения. Никаких ошибок не возникает, логика не запускается после ввода 10-го символа для termDate, когда действительная дата уже введена.

Обратите внимание, что если я уберу проверку isValidTermDate === true, логика запустится, после добавления обратно в логику даже не запустится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...