You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Material日期范围选择器:失焦时自动设置结束日期

Angular Material日期范围选择器自动补全结束日期实现方案

可以通过监听日期范围选择器的closed事件来实现需求,当选择器面板关闭时,检查开始日期已选择但结束日期为空的情况,自动将结束日期设置为开始日期的值。

响应式表单实现方式

模板代码

<mat-form-field appearance="fill">
  <mat-label>选择日期范围</mat-label>
  <mat-date-range-input [formGroup]="range" [rangePicker]="dateRangePicker">
    <input matStartDate formControlName="start" placeholder="开始日期">
    <input matEndDate formControlName="end" placeholder="结束日期">
  </mat-date-range-input>
  <mat-datepicker-toggle matIconSuffix [for]="dateRangePicker"></mat-datepicker-toggle>
  <mat-date-range-picker #dateRangePicker (closed)="onPickerClosed()"></mat-date-range-picker>
</mat-form-field>

组件类代码

import { Component } from '@angular/core';
import { FormGroup, FormControl } from '@angular/forms';

@Component({
  selector: 'date-range-auto-fill-example',
  templateUrl: './date-range-auto-fill-example.component.html',
})
export class DateRangeAutoFillExampleComponent {
  // 定义日期范围表单组
  range = new FormGroup({
    start: new FormControl<Date | null>(null),
    end: new FormControl<Date | null>(null),
  });

  // 选择器关闭时触发的回调
  onPickerClosed() {
    const startDate = this.range.get('start')?.value;
    const endDate = this.range.get('end')?.value;

    // 当开始日期存在且结束日期为空时,自动赋值
    if (startDate && !endDate) {
      this.range.get('end')?.setValue(startDate);
    }
  }
}

模板驱动表单实现方式

模板代码

<mat-form-field appearance="fill">
  <mat-label>选择日期范围</mat-label>
  <mat-date-range-input [rangePicker]="dateRangePicker">
    <input matStartDate [(ngModel)]="startDate" placeholder="开始日期">
    <input matEndDate [(ngModel)]="endDate" placeholder="结束日期">
  </mat-date-range-input>
  <mat-datepicker-toggle matIconSuffix [for]="dateRangePicker"></mat-datepicker-toggle>
  <mat-date-range-picker #dateRangePicker (closed)="onPickerClosed()"></mat-date-range-picker>
</mat-form-field>

组件类代码

import { Component } from '@angular/core';

@Component({
  selector: 'date-range-auto-fill-template-example',
  templateUrl: './date-range-auto-fill-template-example.component.html',
})
export class DateRangeAutoFillTemplateExampleComponent {
  startDate: Date | null = null;
  endDate: Date | null = null;

  onPickerClosed() {
    if (this.startDate && !this.endDate) {
      // 复制开始日期对象,避免引用同一实例导致的意外问题
      this.endDate = new Date(this.startDate);
    }
  }
}

说明

  • closed事件是Angular Material日期范围选择器内置的事件,当选择器面板因点击外部区域、关闭按钮或完成日期选择而关闭时都会触发。
  • 两种实现方式核心逻辑一致:在选择器关闭时校验日期状态,自动补全结束日期。

内容的提问来源于stack exchange,提问作者Aleksa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 16:57:14