作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将 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/
我是一名优秀的程序员,十分优秀!