• Angular 学习笔记 (Material Datepicker)


    更新: 2021-01-07 moment 换掉成 dayjs

    moment 已经不会更新了, 大家都在换 

    https://github.com/angular/components/issues/20599

    angular material team 视乎是没有计划要维护下去了. 所以好事靠自己呗. 

    目前比较火的替代方案是 luxon, date-fns, dayjs

    由于 dayjs 的接口和 moment 最接近, 所以果断就选了 dayjs 咯. 

    做法挺简单的, 就是去 copy paste moment adapter 源码, 然后批量换. 遇到接口不对的地方就改改一下. 

    要安装几个 plugin, 不然许多接口会没有哦

    import * as dayjs from 'dayjs';
    import * as localeData from 'dayjs/plugin/localeData';
    import * as objectSupport from 'dayjs/plugin/objectSupport';
    import * as utc from 'dayjs/plugin/utc';
    import * as localizedFormat from 'dayjs/plugin/localizedFormat';
    import * as customParseFormat from 'dayjs/plugin/customParseFormat';
    dayjs.extend(localeData);
    dayjs.extend(objectSupport);
    dayjs.extend(utc);
    dayjs.extend(localizedFormat);
    dayjs.extend(customParseFormat);

    https://material.angular.io/components/datepicker/overview

    官网介绍很清楚了,这里记入一下我比较不熟悉的.

    1. moment js 

    Angular 推荐我们使用 moment js 

    如果是全场都用的话,可以全局注入 MatMomentDateModule.

    如果是想全局用原生的就注入 MatNativeDateModule

    想要 override 就在 compoent 层级注入.

    providers: [
      { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] },
      { provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS },
      { provide: MAT_DATE_LOCALE, useValue: 'zh-CN' }, //注意 moment 是 zh-CN 和 ng 不一样 /.
    ]
    or
      providers: [
        { provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS },
        { provide: DateAdapter, useClass: NativeDateAdapter },
        { provide: MAT_DATE_LOCALE, useValue: 'zh-Hans' }
     ],

    依赖注入的机制,我感觉不是很方便,如果我想在一个 component 内使用 2 种 datepicker 不是不行吗 ? 

    用 moment 后,我们的类型就是 Moment 而不是 Date 了 

    new Date() 变成了 moment()

    想要替换 display 的格式, 就 override MAT_DATE_FORMATS

    export const MY_MOMENT_DATE_FORMATS: MatDateFormats = {
      parse: {
        dateInput: 'DD MMM YYYY', // moment format
      },
      display: {
        dateInput: 'DD MMM YYYY', // moment format
        monthYearLabel: 'MMM YYYY',
        dateA11yLabel: 'LL',
        monthYearA11yLabel: 'MMMM YYYY',
      },
    };
    
    providers: [
      { provide: MAT_DATE_FORMATS, useValue: MY_MOMENT_DATE_FORMATS },
    ]

    想换 locale 就 override MAT_DATE_LOCALE, 注意 moment 使用 zh-CN 而 angular 是 zh-Hans. 不只是中文,还有其它也不一样,自己查查看哦

  • 相关阅读:
    vagrant 命令+配置+入门案例
    博客园皮肤 Cnblogs-Theme-SimpleMemory
    Vue:前后端交互、路由
    Vue :模块化
    Vue:组件开发
    Vue :模板语法
    ssm实战(11)-----用户功能开发
    ssm实战(10)-----通用功能开发(Windows环境下配置)
    ssm实战(9)-----前端开发(Windows环境下配置)
    spring boot实战——微信点餐系统03:微信授权(用户授权),免费内网穿透(固定ip)
  • 原文地址:https://www.cnblogs.com/keatkeat/p/9853083.html
Copyright © 2020-2023  润新知