Using moment.js in Angular 2 typescript application

后端 未结 5 2122
名媛妹妹
名媛妹妹 2021-02-20 06:21

I\'m struggling in using moment.js library inside an Angular 2 Typescript app. Even after reading the answer to this question I can\'t get it to work.

This is what I did

相关标签:
5条回答
  • 2021-02-20 06:51

    Also I found this: Install Moment.js using NPM:

    npm install moment
    

    Add it to your SystemJS configuration:

    map: {
      'angular2': 'node_modules/angular2',
      'rxjs': 'node_modules/rxjs',
      'moment': 'node_modules/moment/moment'
    }
    

    You also need the interface: tsd install moment --save and then add:

    /// <reference path="typings/moment/moment.d.ts" />
    import * as moment from 'moment';
    
    0 讨论(0)
  • 2021-02-20 07:02

    From your index.html add

     <script src="../node_modules/moment/moment.js"></script>
    

    In your component use:

    declare var moment: any;
    ...
    
    this.startDate = moment().subtract(15, 'days').format('DD-MM-YYYY');
    this.endDate = moment().format('DD-MM-YYYY');
    
    0 讨论(0)
  • 2021-02-20 07:06

    When you import a module using namespace syntax to gather the exports onto a single object, as in import * as moment from 'moment', you are not importing the actually moment object which the module exports, but rather all of its members. You are losing the call signature. To resolve this, in a SystemJS + TypeScript project, specify either a value of "system" for module or a value of true for allowSyntheticDefaultImports, passing these to the TypeScript compiler, preferably via a tsconfig.json file. Then import moment like so

    import moment from 'moment';
    

    and everything will work.

    0 讨论(0)
  • 2021-02-20 07:09

    As pointed out further down moment ships with its own typings now. And @angular/cli have changed aswell. Updated my answer to reflect this.

    npm i --save moment

    import * as moment from 'moment';
    
    export class SomeClass implements OnInit {
    
      date: moment.Moment;
    
      ngOnInit() {
        this.date = moment();
      }
    
    }
    

    is all that is needed with @angular/cli.

    Below is my old outdated answer.

    With angular-cli: So you get Intellisense in VsCode

    edit --> angular-cli-build.js

    module.exports = function(defaults) {
      return new Angular2App(defaults, {
        vendorNpmFiles: [
          ...
    
          'moment/min/**', // add this line
    
          ...
        ]
      });
    };
    

    edit --> system-config.ts

    const map: any = {
      moment: 'vendor/moment/min/moment.min.js' // add this line
    };
    

    In your component:

    import * as moment from 'moment';
    
    ...
    // example of usage
    dates: moment.Moment[] = [];
    
    ngOnInit() {
      let date = moment();
      date.add(2, 'days');
      this.dates.push(date);
    }
    
    0 讨论(0)
  • 2021-02-20 07:12
    import * as moment_ from 'moment';
    const moment:moment.MomentStatic = (<any>moment_)['default'] || moment_;
    
    0 讨论(0)
提交回复
热议问题