【发布时间】:2022-03-26 11:05:42
【问题描述】:
我定义了一个 Mat 日期范围选择器。有了组件的ts代码,开始日期和结束日期都是表单控件。
为了获取日期选择器的值,我在开始日期和结束日期使用 combineLatest。
我的问题是,当我选择最初的开始日期/结束日期时,它会按预期执行,但是当我返回并修改开始日期和结束日期时,当我单击开始日期时会立即执行 combineLatest因为结束日期已经有值了。
如何在执行代码之前等待开始日期和结束日期都发生变化?
父 ts 代码 -
dateRangeStart: FormControl = new FormControl();
dateRangeEnd: FormControl = new FormControl();
...
...
...
combineLatest([
this.dateRangeStart.valueChanges,
this.dateRangeEnd.valueChanges
]).subscribe((dates) => {
//logic
}
})
父级html
<app-date-picker
[dateRangeStart]="dateRangeStart"
[dateRangeEnd]="dateRangeEnd">
</app-date-picker>
日期选择器 ts
@Input() dateRangeStart!: FormControl;
@Input() dateRangeEnd!: FormControl;
maxDate: Date | undefined = undefined;
constructor() { }
ngOnInit(): void {
this.dateRangeStart.valueChanges.subscribe(dateRangeStart => {
if (!!dateRangeStart) {
const maxDate = new Date(dateRangeStart);
maxDate.setDate(maxDate.getDate() + 7);
this.maxDate = maxDate;
} else {
this.maxDate = undefined;
}
})
}
日期选择器 html
<div>
<mat-form-field appearance="fill">
<mat-label>Enter a date range</mat-label>
<mat-date-range-input
[rangePicker]="picker"
[max]="maxDate">
<input
matStartDate
[formControl]="dateRangeStart"
placeholder="Start date">
<input
matEndDate
[formControl]="dateRangeEnd"
placeholder="End date">
</mat-date-range-input>
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-date-range-picker #picker></mat-date-range-picker>
</mat-form-field>
</div>
【问题讨论】:
标签: angular typescript angular-material