ngx-bootstrap日期选择器验证无效日期

3
当输入无效日期时,我希望保存或保留输入的值,以便向用户显示。我该如何做?
背景:我正在使用ngx-bootstrap v5.1.0日期选择器和angular 7.2.15。当输入的日期无效(例如:使用MM / DD / YYYY的09/99/2020),在我离开输入字段时,它会自动将字符串“无效日期”放入输入框中。
这种技术可以工作,但另外,我想给用户一些关于他们输入的日期的反馈。具体来说,输入的值是无效的。在这种情况下,它将是09/99/2020。
我可以触发无效日期验证,但我无法获取最初输入的日期值,以便用户知道他们输入了什么以及为什么无效。

enter image description here

我该如何获取或保留输入字段中的原始值?我尝试使用onChange事件和valueChanges,但ngx-datepicker似乎会覆盖它们,直到你离开该字段才会触发。
1个回答

2

ngx-bootstrap-datepicker有一个自定义的输出事件bsValueChange

将该输出添加到您的HTML input元素中:

  <input type="text"
        class="form-control"
        [minDate]="minDate"
        [maxDate]="maxDate"
        #dp="bsDatepicker"
        (bsValueChange)="onDateChange($event)"
        bsDatepicker [(bsValue)]="myDateValue">

然后在您的组件ts文件中处理此内容:

 myDateValue: Date;
  previousDate: Date;

  ngOnInit() {
    this.myDateValue = new Date();
  }

  onDateChange(newDate: Date) {
    this.previousDate = new Date(newDate);

示例Stackblitz:https://stackblitz.com/edit/ngx-bootstrap-datepicker-taconz

该示例展示了如何使用ngx-bootstrap日期选择器。您可以在此处查看和编辑代码。

谢谢。我没有意识到它有自定义的输出事件,所以这非常有帮助。我仍然想提供反馈,如果用户输入了9/99/2020,那么它会告诉他们他们输入了什么。例如:“无效日期,您输入了9/99/2020”。 因为类型是日期,在您的Stackblitz示例中,无效日期始终显示为Wed Dec 31 1969 18:00:00 GMT-0600(中央标准时间),因为实际日期值为null。 我需要捕获字符串,但我不确定如何/是否可以做到这一点? - Sandy
@Sandy,这并不是一件容易的事情。因为bsDatepicker会自动将无法转换为标准日期的日期应用null(从中创建日期时默认为0),所以你可以通过应用keyup事件处理程序(keyup)=updateText($event),然后手动更新字符串来跟踪它,但在执行此操作时可能会遇到各种错误。 - Z. Bagley
1
我也是这么想的,但还是想确认一下。感谢您的回复。 - Sandy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接