我有一项任务是为日期时间输入划分2条消息:

  • 日期为必填项
  • 已过期(如2023年2月30日不是有效日期)

但问题是当我将验证器与Form Builder一起使用时.在我点击提交按钮之前,日期报税表是有效的.所以当我点击顶峰按钮时,如果日期无效,日期总是返回NULL(这意味着我不能设置2个不同的条件,因为2个条件是相同的空值).所以当我点击提交按钮时,我不能在Form Builder中为2消息控件设置Error.

图书馆

import * as dateFormat from "dateformat";

在组件中:

updateForm: FormGroup;

 constructor(
private fb: FormBuilder) {}

 createForm() {
let now = new Date();
this.updateForm = this.fb.group({
  date: [
    dateFormat(now, "yyyy-mm-dd"),
    [Validators.required],
  ],
 
});}

ngOnInit(): void {
this.createForm()}

onSubmit(){ 
console.log(this.updateForm.value.date)
//alway null if date not valid
}

在html中:

<input
      type="date"
      class="form-control input is-primary"
      formControlName="ngayApDung"
      [ngClass]="{ 'is-invalid': submitted && f.date.errors }"
      cdkFocusInitial
    />
    <div *ngIf="submitted && f.date.errors" class="help is-danger">
      <div *ngIf="f.date.errors.required" translate>
        date is required
      </div>
    </div>

我需要解决这个问题的办法.谢谢!

推荐答案

HTML input element有一个具有许多属性的validityState类. 当您输入错误的日期时,badInput属性是true.

因此,您可以通过添加额外的助手函数来实现您想要的功能:

Firstly add a new helper variable

badInput: boolean = false;

Form has only the required Validation

let now = new Date();
this.updateForm = new FormGroup({
      date_new: new FormControl(now, [
        Validators.required,
      ]),
    });

add a new helper function

check(e: any){
  const target = e.target as HTMLInputElement;
  if (target.validity.badInput){
    this.badInput = target.validity.badInput 
  }
  else{
    this.badInput = false
  }
}

html

<input
      type="date"
      class="form-control input is-primary"
      formControlName="date_new"
      [(ngModel)]="now"
      cdkFocusInitial
      formtarget="date : 'yyyy-MM-dd'"
      (keyup)="check($event)"
      />

  <div *ngIf="updateForm.controls['date_new'].errors && !badInput">Please enter a date
</div>
  <div *ngIf="updateForm.controls['date_new'].errors && badInput">Invalid date
</div>

您需要updateForm.controls['date_new'].errors来仅在出错时显示div,并在更改HTMLInputElement之后显示badInput的更改

Angular相关问答推荐

如何将CDkDropList与Angular FormArray和FormGroup一起使用?

间歇性不正确的SSR重定向(server. ts级别的请求和响应不匹配)

访问Angular 模板中的HTML元素属性

首期日历发行

筛选器不会从文本输入触发更改事件

Angular 16-错误NG8002:无法绑定到NGModel,因为它不是输入的已知属性

Angular-每2个流式传输多个HTTP调用

如果observableA在1秒前触发,则过滤掉observableB

Angular APP_INITIALIZER 中的 MSAL 身份验证

执行ng generate environments时出错时需要合集和原理图

BehaviorSubject 在 Angular 中制作数据之间的时间表(或计时器)

Angular 2 二传手与 ngOnChanges

如何在 ngFor angular 2 内部使用 track

如何将组件导入Angular 2中的另一个根组件

NG 测试中的调试测试

@HostBinding 与 Angular 中的变量类

Angular 2 router.navigate

如何在 Angular cli 项目中包含来自 node_modules 的assets

无法在 RxJs 6 和 Angular 6 中使用 Observable.of

'ng' 不是内部或外部命令、可运行程序或批处理文件