【发布时间】:2018-08-01 13:34:37
【问题描述】:
我正在开发一个具有 Material 设计的 Angular 应用程序,并且我正在使用 Moment.js 来解析和格式化日期。
在我的一个页面中,我有一个Material's Datepicker。我已按照材料的指南使 Datepicker 与 moment 对象一起工作 - 而不是在本机 Date 对象上工作。
我还设法以某种格式在 Datepicker 中显示日期。但是这种格式在组件的提供程序中是硬编码的。 如何在运行时根据用户偏好更改格式?
这是我目前所拥有的:
我已经安装了 npm 的包:
$ npm i moment -S
$ npm i @angular/material-moment-adapter -S
// app.module.ts
import { MatMomentDateModule } from '@angular/material-moment-adapter'
...
@NgModule({
imports: [
MatMomentDateModule,
...
// demo.component.ts
import * as moment from 'moment';
import { MAT_DATE_FORMATS } from '@angular/material/core';
const MY_FORMATS = {
parse: {
dateInput: 'LL',
},
display: {
dateInput: 'LL',
monthYearLabel: 'MMM YYYY',
dateA11yLabel: 'LL',
monthYearA11yLabel: 'MMMM YYYY',
},
};
@Component({
selector: 'app-demo',
templateUrl: './demo.component.html',
styleUrls: ['./demo.component.scss'],
providers: [
{ provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },
],
})
export class DemoComponent {
public dateVal = moment();
}
// demo.component.html
<mat-form-field>
<input matInput [matDatepicker]="myDatePicker" [(ngModel)]="dateVal">
<mat-datepicker-toggle matSuffix [for]="myDatePicker"></mat-datepicker-toggle>
<mat-datepicker #myDatePicker></mat-datepicker>
</mat-form-field>
如您所见,日期格式是在组件的提供程序中定义的。如何在运行时更改它?
可以在此处找到一个工作示例:
https://stackblitz.com/angular/mgaargebgpd?file=app%2Fdatepicker-formats-example.ts
【问题讨论】:
标签: angular datepicker angular-material momentjs