角材料 DatepickerRange 在更改时获得价值

sem*_*lon 2 angular-material angular

我有 Angular Material 的 DatePickerRange,我想在更改 DatePicker 中的值时运行一个函数,我尝试使用该函数(更改)但它不起作用我很乐意为您提供帮助。谢谢!

这是我的 html:

<mat-form-field class="form-field">
    <mat-label>Enter a date range</mat-label>
    <mat-date-range-input [formGroup]="range" [rangePicker]="picker">
        <input matStartDate formControlName="start" placeholder="Start date">
        <input matEndDate formControlName="end" 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-error *ngIf="range.controls.start.hasError('matStartDateInvalid')">Invalid start date
    </mat-error>
    <mat-error *ngIf="range.controls.end.hasError('matEndDateInvalid')">Invalid end date

    </mat-error>
    </mat-form-field>
Run Code Online (Sandbox Code Playgroud)

这就是我要激活的功能:

   @Output() newItemEvent = new EventEmitter<bookedDate>();
      addNewDate() {
        this.dateRange.dateStart = this.range.get('start').value;
        this.dateRange.dateEnd = this.range.get('end').value;
        this.newItemEvent.emit(this.dateRange);
      }
Run Code Online (Sandbox Code Playgroud)

Mat*_*ers 11

我的方法是添加模板引用变量来的输入,matStartDate以及matEndDate。这些都是dateRangeStartdateRangeEnd下面的模板例子:

// Template

<mat-form-field appearance="standard">
  <mat-label>{{reportField.value.label}}</mat-label>
  <mat-date-range-input [rangePicker]="dateRangePicker">
    <input matStartDate
      placeholder="Start date"
      #dateRangeStart>
    <input matEndDate
      placeholder="End date"
      #dateRangeEnd
      (dateChange)="dateRangeChange(dateRangeStart, dateRangeEnd)">
  </mat-date-range-input>
  <mat-datepicker-toggle matPrefix
    [for]="dateRangePicker">
  </mat-datepicker-toggle>
  <mat-date-range-picker #dateRangePicker></mat-date-range-picker>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)

然后,这些输入的值可以由dateChange输出调用的函数访问matEndDate

// Component

dateRangeChange(dateRangeStart: HTMLInputElement, dateRangeEnd: HTMLInputElement) {
  console.log(dateRangeStart.value);
  console.log(dateRangeEnd.value);
}
Run Code Online (Sandbox Code Playgroud)

这避免了dateChange在两个输入上都需要一个事件。


Kir*_*bel -2

尝试dateChange一下

<mat-date-range-input [formGroup]="range" [rangePicker]="picker" (dateChange)="addNewDate()">
    <input matStartDate formControlName="start" placeholder="Start date">
    <input matEndDate formControlName="end" placeholder="End date">
</mat-date-range-input>
Run Code Online (Sandbox Code Playgroud)

  • 这现在不起作用,因为 mat-date-range-input 没有输出事件 (2认同)
  • @Kirubel 不,事实并非如此。它里面的输入有。 (2认同)