加载数据时,重要的日期日期验证不起作用

时间:2018-09-26 11:58:48

标签: angular date angular-material angular-directive

我有一条指令来验证日期是否大于当前日期,输入字段是否无效。当我注册记录时,它工作正常。 当我搜索注册表进行编辑时,会出现问题。尽管该组件没有变红,但它变得无效,因此我必须单击另一个日期并选择相同的日期才能正常工作。 有没有人知道什么在打h?

我的求爱

validate(control: AbstractControl): ValidationErrors | null {
    if ((control.value !== undefined) && (control.value !== null)) {
      const dataInicio: Date = new Date(this.datainicio);
      const dataFim: Date = new Date(this.datafim);
      let parts: any[];
      let data;
      if (this.el.nativeElement.type === 'text') {
        parts = control.value.split('/');
        data = new Date(parts[2], (parts[1] - 1), parts[0]);
      } else {
        parts = control.value.split('-');
        data = new Date(parts[0], (parts[1] - 1), parts[2]);
      }
      if (data) {
        if ((data > dataFim) || ((data) < dataInicio)) {
          return {'spdValidaData': true};
        }
      } else {
        return {'spdValidaData': true};
      }
    }
    return null;
  } 

我的html

<mat-form-field appearance="outline" class="p-campo-input" fxFlex="50"
                            matTooltip="Este campo deve conter a data de registro"
                            matTooltipClass="p-mat-tooltip-form-field">
              <mat-label>Data de Registro</mat-label>
              <input type="date" name="dataRegistro" class="p-campo-data" [ngModel] [value]
                     (input)="fornecedor.pessoa.pessoaJuridica.dataRegistro = this.conversorDataService.converteISO($event.target.value)"
                      spdValidaData [spdConverteData]="fornecedor.pessoa.pessoaJuridica.dataRegistro" id="data_registro"
                     datafim={{dataFinal}} datainicio={{dataInicial}} [textMask]='{mask : mascaraData}' required
                     placeholder="Digite a data de registro" autocomplete="off" [disabled]="semPermissaoAlterar()" matInput>
              <mat-error>Data de registro inválida</mat-error>
            </mat-form-field>

在我的控制器中,我有这个

ngOnInit() {
 .....
 this.dataFinal = new Date().toISOString();
    const data = new Date();
    data.setFullYear(data.getFullYear() - 130);
    this.dataInicial = data.toISOString();
    data.setFullYear(data.getFullYear() + 330);
    this.dataFutura = data.toISOString();
    if (!(this.conversorDataService.suportaData(document))) {
      this.mascaraData = this.mascaraConstants.data;
    }
}

0 个答案:

没有答案