在项目中使用Ant Design(of Angular)的DatePicker组件实现开始时间和结束时间功能时,希望通过nzDisabledDate限制开始和结束时间的选择,查阅API后发现
该参数类型是一个默认入参,返回boolean值的函数。就存在一个问题,存在多组开始和结束日期时,点击开始时间,怎么把对应结束时间传递给函数,从而限制开始日期<结束日期,禁用不符合条件的日期。
于是想通过 (nzOnOpenChange)
弹出日历和关闭日历的回调事件来获取开始 | 结束日期。
<div *ngFor="let control of controlList; trackBy: trackByIndex>
// 开始日期
<nz-date-picker
[(ngModel)]="control.startDate"
(nzOnOpenChange)="inputOpenChange(control)"
[nzDisabledDate]="startDisabledDate"
></nz-date-picker>
// 结束日期
<nz-date-picker
[(ngModel)]="control.endDate"
(nzOnOpenChange)="inputOpenChange(control)"
[nzDisabledDate]="endDisabledDate"
></nz-date-picker>
</div>
ts:
// 日期弹窗打开关闭事件
public inputOpenChange(control) {
this.disableEndDate = control.endDate;
this.disableStartDate = control.startDate;
}
// 开始时间限制无效日期
public startDisabledDate(current: Date): boolean {
// current > 结束时间 为无效(current采用当页日期00:00:00时刻,直接getTime处理会有问题)
return differenceInCalendarDays(current, this.disableEndDate) > 0
}
// 结束时间限制无效日期
public endDisabledDate(current: Date): boolean{
// current < 开始时间 为无效
return differenceInCalendarDays(current, this.disableStartDate) < 0
}
希望在nzOnOpenChange
时获取开始或结束日期,在nzDisabledDate
中使用获取到的日期,进行判断从而禁用无效日期。但是在调试过程中,发现nzDisabledDate
事件中的this指向的是nz-date-picker
这个组件,导致获取不到我们想要的变量。于是将函数修改为箭头函数,保存外层this指针。
// 开始时间限制无效日期
public startDisabledDate = (current: Date): boolean => {
// current > 结束时间 为无效(current采用当页日期00:00:00时刻,直接getTime处理当天比较错误)
return differenceInCalendarDays(current, this.disableEndDate) > 0
}
// 结束时间限制无效日期
public endDisabledDate = (current: Date): boolean => {
// current < 开始时间 为无效
return differenceInCalendarDays(current, this.disableStartDate) < 0
}