gpt4 book ai didi

angular - 如何使用 Angular Material 实现范围内联日历?

转载 作者:行者123 更新时间:2023-12-05 02:00:05 25 4
gpt4 key购买 nike

我想将 Material 日历用作范围内联日历来显示和插入日期范围。使用 mat-date-range-picker 时,这只是工作(但不是内联)。使用 mat-calendar 时,它适用于内联,但不适用于远程。但是,如果我将 selectedRangeValue 作为 DateRange 而不是 Date 传递,则范围会正确显示。

唯一还缺少的是输入...

这是我现在使用的代码(缩写):

<mat-calendar (selectedChange)="selectedRangeChange($event)"
[selected]="selectedRangeValue"
>
</mat-calendar>
selectedRangeValue: DateRange<Date> =  new DateRange<Date>(this.selectedValue.begin, this.selectedValue.end);

我必须这样做,因为 Saturn 日期选择器仅在 Angular 9 之前受支持,而从 Angular 10 开始,Material Datepicker 支持日期范围。但是这个“内联日期范围日历”我就是无法工作......

我找到了 https://github.com/angular/components/issues/20697描述了相同的问题并找到了解决方案,但没有写下来,所以这没有帮助。

我也试着去了解angular material datepicker的源码,可惜还是没看懂。我将不胜感激任何帮助或提示。

最佳答案

建议的解决方案有太多额外代码,更重要的是它对我不起作用。这是一个精简的工作版本。

HTML

<mat-calendar [selected]="selectedRangeValue"
(selectedChange)="selectedChange($event)">
</mat-calendar>

TS

import { Component, EventEmitter, Input, Output } from '@angular/core';
import { DateRange } from '@angular/material/datepicker';

@Component({
selector: 'inline-range-calendar',
templateUrl: './inline-range-calendar.component.html',
})
export class InlineRangeCalendarComponent {

@Input() selectedRangeValue: DateRange<Date> | undefined;
@Output() selectedRangeValueChange = new EventEmitter<DateRange<Date>>();

selectedChange(m: any) {
if (!this.selectedRangeValue?.start || this.selectedRangeValue?.end) {
this.selectedRangeValue = new DateRange<Date>(m, null);
} else {
const start = this.selectedRangeValue.start;
const end = m;
if (end < start) {
this.selectedRangeValue = new DateRange<Date>(end, start);
} else {
this.selectedRangeValue = new DateRange<Date>(start, end);
}
}
this.selectedRangeValueChange.emit(this.selectedRangeValue);
}

}

关于angular - 如何使用 Angular Material 实现范围内联日历?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67484281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com