更改时ngx-bootstrap datepicker内联不刷新minDate / maxDate

时间:2019-06-19 15:50:02

标签: angular datepicker timepicker bootstrap-datepicker ngx-bootstrap

我正在尝试使用ngx-bootstrap库通过Inline DatepickerTimepicker创建完整的日期和时间范围选择器。目的是要达到以下目的: Full datetime range picker

为了使该组件正常工作,我将使用两个Inline Datepicker实例,一个实例用于劣质日期,另一个实例用于优劣日期。只要在下级日期选择器中选择了日期,就必须将该日期设置为上级日期选择器的minDate,反之亦然。

问题在于,只要minDate属性发生更改,上级选择器中新的启用/禁用日期就不会刷新,直到鼠标悬停在任何先前启用的日期上

重现此代码非常简单,您可以在this StackBlitz中找到它。我们有一个日期选择器和一些按钮,这些按钮可以增加或减少日期选择器使用的minDate或maxDate属性:

HTML:

<bs-datepicker-inline
    [bsValue]="today"
    [minDate]="minDate"
    [maxDate]="maxDate"
    (bsValueChange)="onDateChange($event)">
</bs-datepicker-inline>

<button (click)="onClick('min+')">minDate +</button>
<button (click)="onClick('min-')">minDate -</button>
<button (click)="onClick('max+')">maxDate +</button>
<button (click)="onClick('max-')">maxDate -</button>

组件:

today: Date;
minDate: Date;
maxDate: Date;

constructor() {
    this.today = new Date();
    this.minDate = new Date();
    this.maxDate = new Date();
    this.minDate.setDate(this.minDate.getDate() - 1);
    this.maxDate.setDate(this.maxDate.getDate() + 1);
}

onClick(command: string) {
  switch (command) {
    case 'min+':
      this.minDate.setDate(this.minDate.getDate() + 1);
      break;
    case 'min-':
      this.minDate.setDate(this.minDate.getDate() - 1);
      break;
    case 'max+':
      this.maxDate.setDate(this.maxDate.getDate() + 1);
      break;
    case 'max-':
      this.maxDate.setDate(this.maxDate.getDate() - 1);
      break;
  }
}

是否可以通过编程方式触发此视图更新?

StackBlitz链接: https://stackblitz.com/edit/angular-fk9pfe

1 个答案:

答案 0 :(得分:1)

现在尝试以下脏修复程序:

onClick(command: string) {
  switch (command) {
    case 'min+':
      this.minDate.setDate(this.minDate.getDate() + 1);
      break;
    case 'min-':
      this.minDate.setDate(this.minDate.getDate() - 1);
      break;
    case 'max+':
      this.maxDate.setDate(this.maxDate.getDate() + 1);
      this.rerender = true;
      break;
    case 'max-':
      this.maxDate.setDate(this.maxDate.getDate() - 1);
      break;
  }
  this.today = new Date();
}

当最小或最大值更改时,日期选择器组件不会检测到更改,甚至不会使用ChangeDetectorRef进行刷新,但是如果您重置[bsValue]值,它会检测到更改。看来这是一个错误,因为[bsValue][minDate][maxDate]的输入都是绑定的,但是没有检测到最后两个的更改。

编辑:

它实际上似乎是一个错误,已经解决了此问题:https://github.com/valor-software/ngx-bootstrap/issues/5286