直接使用mat-datepicker而无需输入

Lui*_*roa 10 angular-material2 angular

我想将datepicker放在永久侧边栏中,始终可见并且不依赖于输入,这可能吗?我想,只需放入组件并添加opens = true就可以将日期选择器保留在一个始终可见的框内.

Bre*_*ith 19

事实证明这是非常简单的导入MatDatePickerModule按照惯例,然后只需使用mat-calendar选择器

<mat-calendar></mat-calendar>
Run Code Online (Sandbox Code Playgroud)

为了通过打字稿挂钩选择

  @ViewChild(MatCalendar) _datePicker: MatCalendar<Date>

ngOnInit() {
    this._datePicker.selectedChange.subscribe(x => {
      console.log(x);
    });
  }
Run Code Online (Sandbox Code Playgroud)

  • 令人惊讶的是,文档没有提到"mat-calendar" (11认同)
  • 您还可以执行`<mat-calendar [selected] ="selectedDate"(selectedChange)="selectedDate = $ event"> </ mat-calendar>` - 它可以避开viewchild并使日历显示所选日期 (8认同)
  • 哇... &lt;mat-calendar&gt; 太棒了...比全块 Angular Materials DatePicker 整洁得多。但为什么没有任何地方记录它呢? (4认同)

小智 17

您也可以尝试使用 css ex 隐藏:

<mat-form-field style="width:1px;visibility:hidden;">
  <input matInput [matDatepicker]="picker" >
  <mat-datepicker #picker></mat-datepicker>
</mat-form-field>
<button mat-button (click)="picker.open()" ></button>
Run Code Online (Sandbox Code Playgroud)

用css隐藏的好处是日期选择器是相对于隐藏的表单域定位的


Edr*_*ric 6

可能有一个日期选择器“没有”输入。但是,日期选择器仍然需要输入才能起作用,因此一种解决方法只是将输入隐藏起来:

<input [matDatepicker]="picker" type="hidden">
<mat-datepicker #picker></mat-datepicker>
<mat-datepicker-toggle [for]="picker"></mat-datepicker-toggle>
Run Code Online (Sandbox Code Playgroud)

演示版

  • 请为相同的解决方案扩展答案,但删除`type =“ hidden”`并改为隐藏每个CSS的输入,例如:`width:0; 高度:0;填充:0; 边距:0; 边界:无;可见性:隐藏;这确实对我有用。 (3认同)