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

Validation 防止angular2应用程序因无效日期而崩溃(可能覆盖DatePipe?),validation,date,angular,datepicker,angular2-pipe,Validation,Date,Angular,Datepicker,Angular2 Pipe,我基本上有一个HTML5日期选择器,如下所示: <input class="form-control" type="date" [(ngModel)]="startDate" /> {{startDate | date:shortDate}} 我认为这与这个问题无关,但要说清楚,我在幕后有这样的事情: private startDate: string; private endDate: string; updateDateFilter() { let from = n

我基本上有一个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**
}
太棒了。还有很多事情要做,但可能是无关的细节

问题是你可以点击日期选择器,比如说,选择年份并点击delete,这样做:

没问题吧?错误,因为Angular2日期管道被弄糊涂了,我的整个应用程序在显示了这条非常有用的错误消息后崩溃了:

原始异常:管道“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);
  }
}

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

您可以创建自己的日期管道,该管道将检查输入的值,确保它正常,然后调用内置的日期管道。我想这样做就可以了。如果你能在回答中提供一个简短的例子,我可能会把它标记为答案。