【问题标题】:Is there a way to know that mat-datepicker popup was closed because date was clicked有没有办法知道 mat-datepicker 弹出窗口已关闭,因为单击日期
【发布时间】:2019-12-14 13:45:06
【问题描述】:

我想在 mat-datepicker 弹出窗口关闭时执行一些操作,但前提是用户单击日期(如果弹出窗口通过退出键或背景点击关闭,则不应触发操作)。

我知道有一个@Output('closed') closedStream: EventEmitter<void>,但每次弹出窗口关闭时都会触发它。 我的想法是检测打开和关闭事件之间是否存在 dateChange 事件,但如果用户单击已选择的日期,则该事件不起作用。

我尝试使用自定义 DateAdapter 解决此问题(覆盖 sameDatecompareDate 方法以返回所选日期总是与当前选择的日期不同)但似乎 mat-month-view 组件没有使用 DateAdapter 来比较之前的日期发出选择更改:

_dateSelected(date: number) {
    if (this._selectedDate != date) {
      const selectedYear = this._dateAdapter.getYear(this.activeDate);
      const selectedMonth = this._dateAdapter.getMonth(this.activeDate);
      const selectedDate = this._dateAdapter.createDate(selectedYear, selectedMonth, date);

      this.selectedChange.emit(selectedDate);
    }

    this._userSelection.emit();
}

不确定这本身是否是一个错误......

有没有人知道一种更简单的方法来了解材料日期选择器弹出窗口是否由于日期选择而关闭?我错过了什么明显的东西吗?

谢谢!

【问题讨论】:

    标签: angular angular-material angular-material2 mat-datepicker


    【解决方案1】:

    如果您想知道某些更改是使用 [ngModel] + (ngModelChange) 还是 formControl,我认为该方法

      <input matInput [ngModel]="date" (ngModelChange)="change($event)"
            [matDatepicker]="picker" placeholder="Choose a date">
      //in .ts
      date:any;
      change(date:any)
      {
        this.date=date;
        console.log("change")
      }
    

      <input matInput [formControl]="formControl" [matDatepicker]="picker2" 
               placeholder="Choose a date">
       //in .ts
      formControl:FormControl=new FormControl()
      ngOnInit()
      {
        this.formControl.valueChanges.subscribe(res=>{
          console.log("change formControl")
        })
      }
    

    查看simple stackblitz

    【讨论】:

    • 感谢埃利塞奥。我知道我可以订阅基础表单控件的更改,但这将获得我不需要的所有值更改。我只需要检测何时从 mat-datepicker 中选择值(基本上来自底层 mat-calendar)。但问题是 mat-calendar 不会触发 selectedChange 事件,以防用户单击已选择的日期。
    • 其实 mat-month-view 并没有使用 DateAdapter 来检查日期是否相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多