【问题标题】:When selecting a date how can I keep the datepicker open?选择日期时如何保持日期选择器打开?
【发布时间】:2018-10-18 13:50:08
【问题描述】:

我有一个使用 Angular Material Datepicker 的 Angular 4.x 应用程序(package.json 将其显示为 "@angular/material": "^2.0.0-beta.12") - 我的工作正常,但是我需要能够选择日期并保持日期选择器打开 -此功能在 Angular Material (v5.0.0) 的以下版本中可用,但这也意味着将我们的 Angular 本身版本从 4 升级到 5(我们目前无法做到这一点)

我如何修改代码以允许我 a) 即使选择了日期也保持打开日期选择器或 b) 选择日期后立即重新打开日期选择器 - 是否可以使用这个旧版本的材料

https://stackblitz.com/edit/angular-ysspzm-bz2ezu?file=app/datepicker-overview-example.ts

// HTML 组件

<mat-datepicker-toggle
        matSuffix
        [for]="picker">
</mat-datepicker-toggle>

<mat-datepicker
        #picker
        class="fixed-open"
        opened="true">
</mat-datepicker>

// 自定义日期选择器组件 此处添加了导入...

@Component({
  selector: 'app-datepicker',
  templateUrl: './datepicker.component.html',
  styleUrls: ['./datepicker.component.scss']
})

export class DatepickerComponent {
  @ViewChild('keepOpen') _input: ElementRef;

  _openCalendar(picker: MatDatepicker<Date>) {
      picker.open();
  }
}

// node_modules 目录中的datepicker.d.ts(我在 pastebin 链接中使用下面的代码) https://pastebin.com/ChYBmpU6

【问题讨论】:

    标签: javascript angular datepicker angular-material


    【解决方案1】:

    这似乎适用于日期更改,您可以将其重构为您需要的任何事件类型。

    组件

     @ViewChild('picker') picker;
    
      _openCalendar() {
       setTimeout(()=>this.picker.open());
      }
    

    HTML

    <input 
          matInput 
          [matDatepicker]="picker" 
          placeholder="Choose a date" 
          (dateChange)="_openCalendar()"
          #keepOpen>
    

    【讨论】:

    • 好镜头 - dateChange 会选择选择,但不会让日期选择器保持打开状态 - 我开始认为我可能只需要升级我的 Angular 材质(这不会很有趣)跨度>
    • 好吧,一旦选择了日期,这个解决方案会以编程方式重新打开您的 stackblitz 示例中的日期选择器,我是否错过了理解您的要求?
    • 不要忘记 setTimeout 包装器,您需要它才能工作。
    • 它不会做的一件事是重新打开它,如果选择了相同的日期,则日期必须更改。您可能需要利用不同的事件类型来克服这个问题。
    • 我会再看一下stackblitz中的例子,我可能累了,犯了一个错误:)
    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2020-12-09
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多