【问题标题】:Angular datepicker not updating after changing min or max date更改最小或最大日期后角度日期选择器未更新
【发布时间】:2022-02-14 21:40:55
【问题描述】:

我在 mat-card 中有一个日期选择器,如下所示:

<mat-card class="datepickerContainer">
    <mat-form-field appearance="fill">
        <mat-label>Month and Year</mat-label>
        <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="datePicker" [formControl]="date">
        <mat-datepicker-toggle matSuffix [for]="datePicker"></mat-datepicker-toggle>
        <mat-datepicker #datePicker
                        startView="multi-year"
                        (yearSelected)="yearSelectedHandler($event)"
                        (monthSelected)="monthSelectedHandler($event, datePicker)"
                        panelClass="example-month-picker">
        </mat-datepicker>
    </mat-form-field>
</mat-card>

ngAfterViewInit() 中,最小可选年份根据配置对象中指定的年份设置如下:

  ngAfterViewInit(): void {
    this.configService.getConfiguration().subscribe((configs) => {
      this.minDate.setFullYear(configs.startYear);
    });
  }

我已经对此进行了调试,并且正在使用正确的年份作为参数调用 this.minDate.setFullYear()。但是,当我现在在前端打开日期选择器时,它似乎完全被禁用了:

我可以点击选定的年份(2022),但我无法选择月份:

我没有在任何地方禁用日期选择器,为什么它会被禁用,为什么最小年份没有设置为 2021?我还注意到,当我最初将最小日期设置为其他值(如 2021 年)时,它工作正常,所以问题一定与 Angular 有关,不知道我在 ngAfterViewInit() 中更改了最小日期。

【问题讨论】:

    标签: angular typescript datepicker angular11


    【解决方案1】:

    你必须打电话

    ChangeDetectorRef.markForCheck()

    之后

    this.minDate.setFullYear(configs.startYear);

    否则 Angular 将不知道任何变化,因为 Angular 会在 @Input 的引用发生变化时检测到变化,而不是在绑定对象发生变化时检测到变化。

    【讨论】:

    • 这是默认的变更检测吗?我问是因为我以前从未听说过这个,所以我从来没有在一个项目中改变过这个。但是,我注意到如果我已经将 2021 设置为 this.minDate 的默认值,它就可以正常工作。所以它确实与 Angular 有关,不知道我更改了this.minDate。另外,当我打电话给ChangeDetectorRef.markForCheck() 时,Angular 开始抱怨markForCheck() 不存在。这可能是针对不同的 Angular 版本,还是有另一种方式告诉 Angular 我更改了this.minDate
    • 我现在可以让ChangeDetectorRef.markForCheck() 工作,但它仍然不会以任何方式改变行为。
    • 你能在例如 stackblitz 上重现这个问题吗?你的 ngAfterViewInit() 现在怎么样了?
    猜你喜欢
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2011-09-30
    相关资源
    最近更新 更多