如何在运行时更改 Angular Material Datepicker 格式

2023-11-23

我正在研究一个Angular应用程序与Material设计,我正在使用Moment.js解析和格式化日期。

在我的其中一个页面中,我有一个材料的日期选择器。我遵循了材料的指南来使日期选择器与moment对象 - 而不是在本机上Date object.

我还设法以某种格式在日期选择器中显示日期。但这种格式硬编码在组件的提供者中。 如何根据用户偏好在运行时更改格式?

这是我到目前为止所得到的:

我已经安装了 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


好的,所以我终于找到了改变的方法mat-date-picker在运行时格式化(文档根本没有帮助)。

步骤#1 - 创建一个提供格式设置的服务。

您可能已经有这样的服务,如果没有,您应该创建一个,这样您就可以在一处控制日期格式。

// date-time.service
import { Injectable } from '@angular/core';
import * as moment from 'moment';

@Injectable({ providedIn: 'root' })
export class DateTimeService
{
  public getFormat(): string
  {
    return "DD-MM-YYYY"; // add you own logic here
  }
  public getLocale(): string
  {
    return "he-IL"; // add you own logic here
  }  
}

步骤#2 - 创建一个自定义日期适配器,它将负责在运行时解析日期

// customDateAdapter.ts
import { Injectable } from '@angular/core';
import { MomentDateAdapter } from '@angular/material-moment-adapter';
import * as moment from 'moment';
import { DateTimeService } from './date-time.service';

@Injectable()
export class CustomDateAdapter extends MomentDateAdapter
{
  constructor(private _dateTimeService: DateTimeService)
  {
    super('en-US'); // set default locale
  }

  public format(date: moment.Moment, displayFormat: string): string
  {
    const locale = this._dateTimeService.getLocale();
    const format = this._dateTimeService.getFormat();

    return date.locale(locale).format(format);
  }
}

请注意:“自定义日期适配器" 是一个常规类,而不是一个组件。虽然我们是注射为这个班级提供服务。为了实现这一点,我们需要添加@Injectable()装饰器到“CustomDateAdapter”,并在其中进行一些轻微的更改app.module.ts.

步骤 #3 - 修改 app.module.ts 以支持自定义格式并允许对自定义 DateAdapter 进行依赖注入。

// app.module.ts
import { DateAdapter, MatNativeDateModule } from '@angular/material';
import { MatMomentDateModule } from '@angular/material-moment-adapter'
import { CustomDateAdapter } from './<some-path>/customDateAdapter';

@NgModule({
  imports:
  [
    MatNativeDateModule,
    MatMomentDateModule
  ],
  providers:
  [
    CustomDateAdapter, // so we could inject services to 'CustomDateAdapter'
    { provide: DateAdapter, useClass: CustomDateAdapter }, // Parse MatDatePicker Format
  ]
})
export class AppModule { /* ... */ }

P.S
请注意,问题中的代码(来自“demo.component.ts”)不再相关。

Stackblitz 的演示

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在运行时更改 Angular Material Datepicker 格式 的相关文章

  • 如何在控制台中访问 Angular2 组件特定数据?

    有没有办法在控制台中访问 Angular2 特定组件的特定数据以进行调试 就像 Angular1 能够在控制台中访问其组件值一样 更新4 0 0 StackBlitz 示例 https stackblitz com edit angular
  • Angular4 Material md-table 列宽度像普通表一样自动调整大小

    我在 Angular 4 应用程序中使用 md table 因为我将 Material 用于 UI 格式的其他部分 当我使用基本上没有 CSS 的常规表格时 列会自动设置格式以适合最宽的 td 元素 使用 md table 除了太宽的单元格
  • 无法在 routerOnActivate 上获取查询参数

    我在尝试使用新的路线库获取查询参数时遇到问题 VERSION2 0 0 rc 1 Problem routerOnActivate curr RouteSegment prev RouteSegment currTree RouteTree
  • Angular2:嵌套 *ngFor 导致“表达式在检查后已更改”

    我有一个 angular2 组件 my tree 我在父 my app 组件中使用它 我的应用程序 如下 Component selector my app providers template
  • 如何更改 mat-slide-toggle 的颜色属性/覆盖组件的 CSS?

    有什么办法可以改变颜色属性mat slide toggleAngular Material 组件库中的组件 如何覆盖它的样式 或者有人可以建议我任何其他用于 Angular 5 应用程序的滑动开关 例如材料滑动开关 您可以更改原色mat s
  • jQuery Datepicker showAnim 没有动画

    我尝试了多种方法并在互联网上搜索 试图让动画发挥作用 但一无所获 我有日期选择器工作和日期格式选项 但没有动画 我希望使用 剪辑 选项 以下是各个文件中的内容 应用程序 js require jquery require jquery tu
  • 角度材料设计布局

    How can I design a layout with angular material layout like 我举了一个例子材料设计 http www google com design spec layout structure
  • 选中复选框时,角度反应形式禁用输入

    我有一个复选框和输入 我想要做的是在选中复选框时禁用输入 并在取消选中复选框时启用输入 这是我的表格组 this workingTime this fb group toggle false this is the checkbox fro
  • Angular 中的单元测试点击事件

    我正在尝试将单元测试添加到我的 Angular 2 应用程序中 在我的一个组件中 有一个带有 click 处理程序 当用户单击按钮时 将调用在中定义的函数 ts类文件 该函数在 console log 窗口中打印一条消息 表明该按钮已被按下
  • 将 WAR 部署到 Tomcat(Spring Boot + Angular)

    我正在尝试使用以下命令部署 Spring Boot 应用程序WAR包装至Tomcat 10 应用程序已成功部署 但是 当我尝试访问端点时 它会导致404 未找到 战争文件 应用程序 war http localhost 8080 appli
  • 验证以防止角度形式出现重复的形式值

    我有几个表单数组 我需要进行验证 以便每个表单行中的特定字段在所有表单数组中必须是唯一的 如果任何值出现多次 则两个表单字段都必须标记为红色 我设法编写了一个函数 以便如果这些字段有任何更改 该函数将返回 true false 但我不确定如
  • 如何将Sinon添加到Angular 2测试中?

    我想添加Sinon进行测试 但无法让它运行 我已经安装了 sinon 和 karma sinon 作为 DevDependency 将 sinon 添加到我的 karma 配置文件中的框架中 frameworks jasmine brows
  • 鼠标悬停时不会打开单独组件中的材质子菜单

    我注意到 Angular Material 中的这种行为 如果我在单独的组件中移动子菜单 则它不会在鼠标悬停时打开 就像它是在与其父菜单相同的组件中定义的那样 例如 此菜单在鼠标悬停时打开
  • Angular 6 - 将事件处理程序添加到动态创建的 html 元素

    我想将点击事件附加到动态创建的 html 元素 单击事件应该能够触发组件中的另一个方法 我已经浏览过其他建议使用 ElementRef 附加事件的答案 但是 它不适用于我的情况 我正在使用 mapQuest API 来渲染地图 地图将绘制地
  • Mapbox 打字稿

    通过关注这个项目 我成功地让 Leaflet 与 Angular 2 和 Webpack 一起工作 Angular 2 传单启动器 https github com haoliangyu angular2 leaflet starter 我
  • 为什么使用 MarkForCheck() 和 setTimeout?

    我对 ChangeDetectorRef 中的 MarkForCheck 方法有疑问 对于一种用法我必须使用this cd markForCheck 因为在控制台中我获取了值 但它没有在视图上更新 setTimeout gt this ch
  • TemplateRef 中未定义 ElementRef

    在 Angular 中试验 ElementRef TemplateRef ViewRef 和 ViewContainerRef 我已经创建了一个 HTML 模板 我想从那里创建一个视图并将该视图传递给 ViewContainerRef 但它
  • 获取异常 jQuery 必须包含在 Bootstrap 的 JavaScript 之前

    我遇到以下异常 bootstrap js 240 Uncaught TypeError Bootstrap 的 JavaScript 需要 jQuery jQuery 必须包含在 Bootstrap 的 JavaScript 之前 在 Ob
  • 从 Angular 6 中的 html 导出 Pdf

    我想从 Angular 6 中的 html 导出 pdf 所以 我正在使用jspdf图书馆 但我不能给出颜色和背景颜色等样式 我怎样才能实现这个目标 如果有其他免费图书馆jspdf 我可以用它 您可以从下面的链接查看演示 DEMO http
  • 如何让 webpack 和 iis express 协同工作?

    I have Angular 2 和 Webpack 2 入门 https github com qdouble angular webpack2 starter它通过 webpack dev server 在节点上运行 我如何使用 web

随机推荐

  • 使用SqlDataReader时如何获取存储过程的返回值?

    使用数据读取器时是否无法获取存储过程的返回值 返回值始终为 null 但 SP 从 SSMS 内返回有效的 int myCommand CommandText GetVenueVideos SqlParameter retVal new S
  • 使用带有 Cookie 持久性的改造

    伙计们 我正在使用改造 我想知道如何透明地处理会话 cookie 为此 我扩展了给定的 ApacheClient 并在对 ApacheClient execute HttpClient HttpUriRequest 的自定义调用中使用 Co
  • 在 Android 上为片段实现 OnClickListener

    我有一个滑动菜单项目 在主布局内部另一个布局称为片段 这是 HomeFragment java package info androidhive slidingmenu import android app Fragment import
  • 显示 woocommerce 销售结束日期

    我在 WordPress 中找到了这个帖子http wordpress org support topic get woocommerce scheduled sale end date replies 15 但当我尝试时 它不起作用 也许
  • Python argparse 位置参数和子命令

    我正在使用 argparse 并尝试混合子命令和位置参数 出现了以下问题 这段代码运行良好 import argparse parser argparse ArgumentParser subparsers parser add subpa
  • .htaccess - ErrorDocument 与 RewriteRule

    我希望将丢失文件和无效目录的请求重定向到自定义 404 错误页面 我相信这可以使用两种方法来完成 redirect invalid requests and missing files to the not found page Rewri
  • 给定背景颜色的良好文本前景色

    我正在绘制一个颜色选择按钮 并且正在寻找一个漂亮且简单的公式来为给定的 RGB 背景颜色获得良好的文本颜色 前景 一个简单的尝试是只采用补色 但这会为纯蓝色或纯红色等颜色产生一个看起来很奇怪的按钮 有什么众所周知的东西可以做到这一点吗 如果
  • 发布 MQTT、AWS IoT 时出现“SSL: CERTIFICATE_VERIFY_FAILED”错误

    我收到以下错误 ERROR SSLError SSL validation failed for https data iot ap northeast 2 amazonaws com topics app 2Ftest 2Frespons
  • 什么是常量和文字常量?

    我正在学习 Python 我对常量和文字常量感到困惑 这些是什么 我们使用它们的目的是什么 和普通变量有什么区别 我是一个真正的初学者 作为初学者 我可以说我对编程世界一无所知 例如 我不知道表达式是什么 反之亦然 我一直在使用Python
  • DASK:Typerrror:列分配不支持 numpy.ndarray 类型,而 Pandas 工作正常

    我正在使用 Dask 读取 10m 行 csv 并执行一些计算 到目前为止 它被证明比 Pandas 快 10 倍 下面我有一段代码 与 pandas 一起使用时工作正常 但与 dask 一起使用时会引发类型错误 我不确定如何克服打字错误
  • 为什么一个变量与多个值的不相等检查总是返回 true?

    我有一个变量v在我的程序中 可能需要any值集中的值 a b c z 我的目标是仅在以下情况下执行某些语句v is not x y or z 我努力了 对于类 C 语言 其中相等运算符比较actual字符串值 例如c javascript
  • 角度数据绑定 - 输入类型=“数字”

    我在使用 AngularJS 绑定数字值时遇到问题 我在 JSFiddle 上放了一个简化的示例 http jsfiddle net treerock ZvdXp div div
  • 在 Rails 中使用 UJS 时,ajax:success 和 ajax:complete 回调不起作用

    我有一个链接 当我点击它时 它会触发一个ajax调用 然后用另一个链接替换这个链接 例如原始链接是 添加朋友 当我点击这个链接时 它会向add friend操作发送一个ajax请求如果添加了朋友 上面的链接将被另一个链接 取消请求 替换 我
  • OpenMP 和 MPI 混合程序

    我有一台有 8 个处理器的机器 我想在我的代码中交替使用 OpenMP 和 MPI 如下所示 OpenMP 阶段 排名 1 7 等待 MPI Barrier 等级 0 使用所有 8 个带有 OpenMP 的处理器 MPI 阶段 等级 0 达
  • Javascript 的 setInterval 是否会阻止函数返回?

    我有一个 JavaScript 函数function a 我想每 10 秒被执行一次 我发现我可以使用setInterval这样我就可以做类似的事情 setInverval a 10000 我的问题如下 这是否意味着i 每 10 秒调用一次
  • 如何添加全局 ASP.Net Web Api 过滤器?

    我创建了一个 Web Api 过滤器 使用System Web Http Filters ActionFilterAttribute 但我无法让它在 ASP Net MVC 4 中工作 我尝试将其添加到RegisterGlobalFilte
  • 连接 postgresql 和 codeigniter

    我是 postgresql 的新手 并且已经使用 Codeigniter 一年了 我有一个小型 postgresql 数据库 我想从 Codeigniter 调用它 在我的database php 文件中我有这样的设置 active gro
  • Any、AnyVal、AnyRef、Object 之间有什么关系以及它们在 Java 代码中使用时如何映射?

    我通常会尝试每种组合直到它编译为止 有人可以解释我应该在哪里使用什么吗 我会不同意Chris s answer一方面 课程Any AnyRef and AnyVal are类 但由于 JVM 的内在限制 它们在字节码中不会显示为类 This
  • Python:matplotlib - 概率质量函数作为直方图

    我想在同一个图表上绘制直方图和线图 然而 要做到这一点 我需要将直方图作为概率质量函数 所以我想在 y 轴上有一个概率值 但是 我不知道该怎么做 因为使用normed选项没有帮助 下面是我的源代码和使用数据的预览 我将非常感谢所有的建议 d
  • 如何在运行时更改 Angular Material Datepicker 格式

    我正在研究一个Angular应用程序与Material设计 我正在使用Moment js解析和格式化日期 在我的其中一个页面中 我有一个材料的日期选择器 我遵循了材料的指南来使日期选择器与moment对象 而不是在本机上Date objec