2017-05-16 13 views
21

私はAngular 2アプリケーションでグローバル変数を作成するのに本当に苦労します。角4/5グローバル変数

私はすでにグーグルでこれについての過去3時間のStackOverflowの多くの記事を読んでいますが、私はそれを動作させることができないようです。私が本当に助けてくれることを願っています。私はこの質問に対して謝ります。

だから私は、私のファイルはこのようになりますこれは、globals.tsと呼ばれています:

import { Injectable } from "@angular/core"; 


@Injectable() 
export class Globals { 

    var role = 'test'; 

} 

そして、私はこのような私のコンポーネントの私のHTMLビューで変数役割を使用したい:

{{ role }} 

私はすでに次のように私のapp.module.tsにglobals.tsファイルを追加しました:

providers: [ 
    Globals 
], 

このファイルで何をしても、うまく動作しませんでした。私がしたくないのは、globals.tsファイルをすべてのコンポーネントで手動でインポートしなければならないということです。そのため、私はプロバイダ機能を使いたいのです。

私は本当にあなたが私を助け、もう一度ごめんなさいと願っています。あなたはAngular dependency injectionを経由して、あなたのアプリケーションの任意のポイントからGlobalsエンティティにアクセスすることができます

E

+1

'エクスポートクラスグローバル{ var role = 'test'; } '< - それは何ですか? – zerkms

+0

これは私のグローバル変数を格納したい私のクラスのグローバルであるはずです。たとえば変数 "role"はグローバル変数が機能しているかどうかをテストするための文字列 "test"が必要です。 –

+0

これは有効な文字列ではありません。 – zerkms

答えて

39

よろしく。あなたには、いくつかのコンポーネントのテンプレートで出力にGlobals.role値をしたい場合には、すべてのサービスのようなコンポーネントのコンストラクタを通じてGlobalsを注入する必要があります

// hello.component.ts 
import { Component } from '@angular/core'; 
import { Globals } from './globals'; 

@Component({ 
    selector: 'hello', 
    template: 'The global role is {{globals.role}}', 
    providers: [ Globals ] // this depends on situation, see below 
}) 

export class HelloComponent { 
    constructor(private globals: Globals) {} 
} 

を私はHelloComponentGlobalsを提供するが、代わりにそれはいくつかのHelloComponent's親コンポーネントに提供することができますかAppModuleでもGlobalsには変更できない静的データ(定数のみ)があるまで問題はありません。しかし、それが真実でなく、例えば異なるコンポーネント/サービスがそのデータを変更できる場合、Globalssingletonでなければなりません。その場合、使用される階層の最上位レベルに提供する必要があります。のは、これがAppModuleあるとしましょう。また

import { Globals } from './globals' 

@NgModule({ 
    // ... imports, declarations etc 
    providers: [ 
    // ... other global providers 
    Globals // so do not provide it into another components/services if you want it to be a singleton 
    ] 
}) 

、それはそれはで最後の

更新

// globals.ts 
import { Injectable } from '@angular/core'; 

@Injectable() 
export class Globals { 
    role: string = 'test'; 
} 

する必要があり、VARあなたが行った方法を使用することは不可能だ、私が作成しました単純demo on Plunker、ここでは単一のGlobalsが3つのコンポーネント間で共有され、そのうちの1つはGlobals.roleの値を変更できます。

+1

しかし、別のコンポーネント(something = globals.role;)で取得したとき、私は 'test'を取得しました。私が割り当てた値ではありません。 – punkouter

+3

@punkouter私はPlunkerデモリンクで答えを更新しました。それがあなたを助けることを願っています! – dhilt

+1

これはやや古いスレッドですが、私はあなたを愛していると言いたいだけです。私の日を救った! –