"момент" не имеет экспортируемого члена "по умолчанию"

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

"момент" не имеет экспортируемый элемент "по умолчанию" при импорте библиотеки.

Ниже мой код:

import {Inject, Injectable, Optional} from '@angular/core';
import {DateAdapter, MAT_DATE_LOCALE, MatDateFormats} from '@angular/material';
import * as _moment from 'moment';
import {default as _rollupMoment, Moment} from 'moment';

const moment = _rollupMoment || _moment;

2 ответа

Решение

Попробуйте добавить "allowSyntheticDefaultImports": true to your tsconfig.json

Кажется, у вас проблемы с импортом момента

Как видно из документации, для Typescript 2.x попробуйте добавить "moduleResolution": "node" в compilerOptions в вашем tsconfig.json файл, а затем используйте любой из приведенного ниже синтаксиса:

import * as moment from 'moment';
import moment = require('moment');

PS: убедитесь, что вы установили moment.js с npm:

npm install --save moment

Вот вам полное решение этой проблемы:

Первый:

 npm install moment --save
 npm install @angular/material-moment-adapter

Второй:

в вашем package.json в разделе dependencies убедитесь, что у вас есть следующий код:

    "@angular/material-moment-adapter": "^8.2.3",

В третьих:

в вашем файле tsconfig.json в разделе compileroptions добавьте следующее:

"allowSyntheticDefaultImports": true

Четвертый:

Измените свой компонент с помощью следующих кодов:

import { MomentDateAdapter } from '@angular/material-moment-adapter';
import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';
import * as _moment from 'moment';
import { default as _rollupMoment } from 'moment';

const moment = _rollupMoment || _moment;
export const MY_FORMATS = {
parse: {
  dateInput: 'LL',
},
display: {
  dateInput: 'YYYY-MM-DD',
  monthYearLabel: 'YYYY',
  dateA11yLabel: 'LL',
  monthYearA11yLabel: 'YYYY',
 },
};

@Component({
 selector: 'app-newsfeedform',
 templateUrl: './newsfeedform.component.html',
 styleUrls: ['./newsfeedform.component.css'],
 providers: [
  { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] },

  { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },
],
})

Пятое:

В вашем файле component.html datepicker, как показано ниже:

     <mat-form-field appearance="outline" fxFlex>
                    <input matInput [matDatepicker]="publishdate" placeholder="Publish Date"
                        formControlName="publishdate">
                    <mat-datepicker-toggle matSuffix [for]="publishdate"></mat-datepicker-toggle>
                    <mat-datepicker #publishdate></mat-datepicker>
                </mat-form-field>

То есть вы можете настроить Angular material datepicker в любом формате, который хотите, просто измените формат, указанный выше.

Добавьте следующую строку в tsconfig.json файл:

"allowSyntheticDefaultImports": true

В gulpfile.js в разделе externals добавить'moment/moment' а также 'moment' и то и другое

externals: [
      'moment/moment',
       'moment'
   ]
Другие вопросы по тегам