Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度材质2日期选择器-动态格式_Angular_Typescript_Momentjs_Angular Material2 - Fatal编程技术网

Angular 角度材质2日期选择器-动态格式

Angular 角度材质2日期选择器-动态格式,angular,typescript,momentjs,angular-material2,Angular,Typescript,Momentjs,Angular Material2,我需要根据一些用户设置以两种不同的格式显示日期 比如说“YYYY-MM-DD”和“DD/MM/YYYY” 我知道我必须编写一个自定义的DateAdapter(我已经这样做了),但是否可以使用下拉列表等在这两种格式之间切换? 附笔。 我还使用了Moment.js。您的自定义日期格式位于TS文件中 这意味着您可以访问Javascript和Typescript 您可以使用localStorage以日期格式存储格式: export const CUSTOM_DATE_FORMAT = { par

我需要根据一些用户设置以两种不同的格式显示日期

比如说
“YYYY-MM-DD”
“DD/MM/YYYY”


我知道我必须编写一个自定义的
DateAdapter
(我已经这样做了),但是否可以使用下拉列表等在这两种格式之间切换?

附笔。
我还使用了Moment.js。

您的自定义日期格式位于TS文件中

这意味着您可以访问Javascript和Typescript

您可以使用localStorage以日期格式存储格式:

export const CUSTOM_DATE_FORMAT = {
  parse: {
    dateInput: localStorage.getItem('dateFormat'),
  },
  display: {
    dateInput: localStorage.getItem('dateFormat'),
    monthYearLabel: 'MMMM YYYY',
    dateA11yLabel: 'DD/MM/YYYY',
    monthYearA11yLabel: 'MMMM YYYY',
  },
};

我认为您将了解如何将格式存储在本地存储中;)

在下面,您可以看到使用本地存储的自定义适配器。这样,您就不必重新加载窗口

import { MomentDateAdapter, MatMomentDateAdapterOptions } from "@angular/material-moment-adapter";
import { Moment } from "moment";
import { UserService } from "app/core/api/user.service";

export class CustomDateAdapter extends MomentDateAdapter {

    parse(value: any, parseFormat: string | string[]): Moment | null {
        let dateFormat: string | string[] = localStorage.getItem("dateFormat") || parseFormat;
        return super.parse(value, dateFormat);
    }

    format(date: Moment, displayFormat: string): string {
        let dateFormat: string | string[] = localStorage.getItem("dateFormat") || displayFormat;
        return super.format(date, dateFormat);
    }

}
在您的模块中:

....
import { MAT_DATE_FORMATS } from '@angular/material/core';
import { MatMomentDateModule, MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter, MAT_MOMENT_DATE_FORMATS } from '@angular/material-moment-adapter';
import { CustomDateAdapter } from 'app/material/custom-date-adapter';

....
providers: [
    { provide: DateAdapter, useClass: CustomDateAdapter },
    { provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } },
    { provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS }
]})
export class MaterialModule { }

请注意,这个例子使用了DateAdapter的momentjs实现。

谢谢,它可以工作!你有没有想法,如何在不重新加载窗口的情况下完成?如果没有,我会接受这个答案,因为它肯定是有效的。为了避免重新加载窗口,您需要重写声明自定义日期适配器的模块。我不知道怎么做,对不起:/