0

私はangular2でmoment.jsライブラリをインポートしようとしています。angular2でJavascriptライブラリをグローバルにインポートするには

import {Component} from 'angular2/core'; 
import * as moment from 'moment'; 

@Component({ 
    selector: 'app', 
    template: require('./app.component.html') 
}) 
export class AppComponent { 
    moment:any = moment; 
    constructor() {} 
} 

は、しかし、私は私が持っているすべてのコンポーネントにこれをインポートしない: 私は、次の解決策を見つけました。グローバルに注入する方法はありますか?すべてのコンポーネントで使用できますか?

答えて

4

瞬間をインポートする共通基本タイプからコンポーネントを派生させます。

import * as moment from 'moment'; 

export class MomentAwareClass { 
    moment:any = moment; 
    constructor() {} 
} 

子供

import {Component} from 'angular2/core'; 

@Component({ 
    selector: 'app', 
    template: require('./app.component.html') 
}) 
export class AppComponent extends MomentAwareClass { 
    constructor() {} 
} 

更新

もう一つの方法は、これはより速く、あなたのクラスのロードを行います、Injectable()デコレータでサービスを記述するためにDependency Injectionを使用することです。

import { Injectable } from '@angular/core'; 
import * as moment from 'moment'; 

@Injectable() 
export class SomeClass { 
    public moment: any = moment; 
} 
+0

ありがとうございます!これは素晴らしいアプローチです。他にもいくつかの選択肢があるかどうかを確認したいと思います。 – kdu

+0

あなたは@injectableとマークされていないものを注射することはできません。このようなサードパーティ製のライブラリでは不可能です。サービスの角度内でラップしない限り、理解できます。これは、おそらく上記の説明よりも優れた解決策です。 – KnowHoper

4

私がhere読んだものから、私はこのような全体のアプリケーション・ブートストラップ時にmomentjsライブラリーを提供することができます。

import * as moment from 'moment'; 
import {provide} from 'angular2/core'; 
import {bootstrap} from 'angular2/platform/browser'; 

bootstrap(App, [ 
    provide("moment", {useValue:moment}) 
]) 

それから私はこのように、DIを使って、自分自身のコンポーネントでそれを使用することができます。

import {Component, OnInit, Inject} from 'angular2/core'; 

@Component({ 
    selector: 'app', 
    template: require('./app.component.html') 
}) 
export class AppComponent { 
    constructor(@Inject("moment") private moment) {} 
} 
関連する問題