【问题标题】:How to get Previous date Angular date picker如何获取上一个日期角度日期选择器
【发布时间】:2020-09-07 06:43:50
【问题描述】:

我正在像这样使用 Angular Material DatePicker

<input matInput [(ngModel)]="selectedDate" [max]="today" (dateChange)="onDateSelect($event)"
              [matDatepicker]="picker" readonly />

我需要在

中设置最后选择的日期

onDateSelect()

功能。功能如下

 onDateSelect(event) {
    if(some condition){
      this.selectedDate = <//set previous date>
    }
    this.selectedDate = event.value;   
 }

如何将上一个日期传递给上述函数

【问题讨论】:

  • 上一个日期反映了什么?所选日期的前一天或除所选日期之外的任何其他日期
  • 上一个日期的意思是,从日历中更改日期之前记录的日期

标签: angular datepicker angular-material


【解决方案1】:

另一种选择是使用 FormControl,并且成对使用

selectedDate=new FormControl()
ngOnInit()
{
   this.selectedDate.valueChanges.pipe(
      startWith(this.selectedDate.value), //it's necesary send a first value
      pairwise())  //the pairwise make the "magic"
 .subscribe(([old,value])=>{
    if (old!=value)
    {
       console.log("I change from "+old+" to "+value)
    }
 })

<input matInput [formControl]="selectedDate" [max]="today" 
           [matDatepicker]="picker" readonly />

see the stackblitz

【讨论】:

【解决方案2】:

创建一个变量 prevSelectedDate 为 null 并添加请在代码中添加以下更改。

onDateSelect(event) {

if(some condition && this.prevSelectedDate){
  this.selectedDate = this.prevSelectedDate;
}
this.selectedDate = event.value;  
this.prevSelectedDate =  this.selectedDate

}

【讨论】:

    【解决方案3】:

    您需要 2 个变量,如下所示:

    如果您的验证未通过,请重置为上一个。

    JS:

    export class DatepickerApiExample implements OnInit {
      previousVal: any;
      curVal: any;
      checkPassed: true;
    
      ngOnInit() {
        this.previousVal = this.curVal;
      }
    
      onDateSelect($event: any) {
        if (this.checkPassed) {
          this.previousVal = this.curVal;
        } else {
          //Reset to previous
          this.curVal = this.previousVal;
        }
      }
    }
    

    HTML:

    <mat-form-field class="example-full-width" appearance="fill">
      <mat-label>Choose a date</mat-label>
      <input matInput [(ngModel)]="curVal" [max]="today" (dateChange)="onDateSelect($event)" [matDatepicker]="picker">
      <mat-datepicker #picker></mat-datepicker>
    </mat-form-field>
    

    【讨论】:

    • 谢谢@huan,但问题是日期可以更改多次。我需要用以前的值跟踪每一个变化
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2019-07-04
    • 2018-12-31
    • 1970-01-01
    • 2020-02-08
    相关资源
    最近更新 更多