防止 angular2 应用程序因无效日期而崩溃(可能覆盖 DatePipe?)

Prevent angular2 app from crashing due to invalid date (maybe override DatePipe?)

我基本上有这样一个 HTML5 日期选择器:

<input class="form-control" type="date" [(ngModel)]="startDate" />

另一个显示模型日期的区域如下:

{{startDate | date:shortDate}}

我不认为它与这个问题相关 但为了彻底,我在幕后有这样的事情:

private startDate: string;
private endDate: string;

updateDateFilter() {
    let from = new Date(this.startDate);
    let to = new Date(this.endDate);
    **Stuff to filter based on date range**
}

太棒了。还有很多事情正在发生,但可能是无关紧要的细节。

麻烦的是你可以点击日期选择器,比如 select 年份,然后点击删除,它会这样做:

没问题吧?错了,因为 Angular2 日期管道变得混乱,并且在显示这个非常有用的错误消息后我的整个应用程序崩溃了:

ORIGINAL EXCEPTION: Invalid argument '' for pipe 'DatePipe'

解决方案看起来很简单,但我不确定如何去做。我想我只需要在 DatePipe 处理之前捕获日期字符串,并确保日期、月份和年份的内容有效。但是 Angular2 确实很神奇,而且由于它是使用模型绑定完成的,所以我看不到明确的干预途径。

我可能需要覆盖 DatePipe,保留其功能但首先检查字符串。我不知道怎么办。如果您知道该怎么做,请分享。任何替代方法也会有所帮助。只要日期不完整,我就不能让应用程序崩溃。

谢谢!

您可以创建自己的管道并扩展默认的 DatePipe 或只是实例化它并以编程方式调用它。

@Pipe({
  name: 'customDate'
})
export class CustomDatePipe extends DatePipe {
  transform(date: string, pattern?: string): string {
    // validate/initialize date
    return super.transform(date, pattern);
  }
}

或者第二种情况:

export class CustomDatePipe {
  private datePipe: DatePipe = new DatePipe();

  transform(date: string, pattern?: string): string {
    // validate/initialize date
    return this.datePipe.transform(date, pattern);
  }
}

没有机会检查这个,但我认为这两种方法都应该有效。