Пользовательский формат DatePicker для Angular Material выдает ошибку «format.replace не является функцией» - PullRequest
0 голосов
/ 25 февраля 2019

Я работаю над настройкой даты в формате дд-ммм-ггг, т.е., например, 12 февраля 2019 года, работаю с использованием углового материала 6, и это мой код, я не использовал функцию замены, но все же получаю эту ошибку

Содержимое файла компонента

 import { MomentDateAdapter ,MatMomentDateModule } from '@angular/material-moment-adapter';
    import {DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE} from '@angular/material/core';
    import {MatDatepicker} from '@angular/material/datepicker';
    import {default as _rollupMoment, Moment} from 'moment';
    import * as _moment from 'moment';
export class MyDateAdapter extends NativeDateAdapter {
    // constructor() {
    //  super('en-US');
    // }

    format(date: Date, displayFormat: Object): string {
        if (displayFormat == "input") {
            let day = date.getDate();
            let month = date.getMonth() + 1;
            let year = date.getFullYear();
            return this._to2digit(day) + '/' + this._to2digit(month) + '/' + year;
        } else {
            return date.toDateString();
        }
    }

    private _to2digit(n: number) {
        return ('00' + n).slice(-2);
    } 


 }
    export const MY_FORMATS = {
        parse: {
          dateInput: 'LL',
        },
        display: {
            // dateInput: { month: 'short', year: 'numeric', day: 'numeric' },
            dateInput: 'input',
            monthYearLabel: {year: 'numeric', month: 'short'},
            dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},
            monthYearA11yLabel: {year: 'numeric', month: 'long'},
        }
      };

И часть HTML

<div class="col-lg-4 m-form__group-sub">
                                            <mat-form-field class="example-full-width" appearance="outline">
                                                <mat-label>Invoice Date</mat-label>
                                                <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="picker1" placeholder="Choose a date" formControlName="inv_date">
                                                <mat-datepicker-toggle matSuffix [for]="picker1"></mat-datepicker-toggle>
                                                <mat-datepicker #picker1></mat-datepicker>
                                            </mat-form-field>
                                        </div>

1 Ответ

0 голосов
/ 08 апреля 2019

В моем случае я проверил файл webpack: ///./node_modules/@angular/material/esm5/datepicker.es5.js строку 1630, и когда я получил объект даты Moment в качестве значения, у меня был формат.replace error.

Я использовал NativeDateAdapter из angular / core на своем пользовательском компоненте, и ошибка исчезла (я переопределяю в моем app.module с MomentDateAdapter).

В вашем случае,Я думаю, вы можете попытаться вернуть функцию замены из вашей собственной функции форматирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...