Angular 2 / Typescriptでグローバル変数を宣言するにはどうすればよいですか?
私は、ある変数を Angular 2
の Typescript
言語でどこでもアクセスできるようにしたいと思います。どのようにこれを達成すればいいでしょうか?
158
10
私は、ある変数を Angular 2
の Typescript
言語でどこでもアクセスできるようにしたいと思います。どのようにこれを達成すればいいでしょうか?
以下は、
Service
やObserver
を使わない最もシンプルな解決策です。グローバル変数をファイルに保存して、それをエクスポートします。
他のファイルでグローバル変数を使用するには、
import
ステートメントを使用します。 ``import * as myGlobals from './globals';```.例
@supercobraのソリューションも気に入っています。 少し改善したいと思います。 すべての定数を含むオブジェクトをエクスポートする場合は、 require を使用せずに、モジュールをes6 import 単に使用できます。
また、Object.freezeを使用して、プロパティを真の定数にしました。 トピックに興味がある場合は、この投稿を読むことができます。
インポートを使用してモジュールを参照してください。
シェアードサービスが最適なアプローチ
しかし、アプリケーション全体で単一のインスタンスを共有できるようにするためには、登録時に非常に注意する必要があります。アプリケーションを登録する際に定義する必要があります。
しかし、コンポーネントの
providers
属性の中で再度定義する必要はありません。さもなければ、コンポーネントとそのサブコンポーネントに対して、サービスの新しいインスタンスが作成されます。
Angular2での依存性注入と階層型インジェクタの動作については、こちらの質問を参照してください。
また、グローバルプロパティが変更されたときにアプリケーションの一部に通知するために、サービス内に
Observable
プロパティを定義することができることに気づくことができるでしょう。詳しくはこちらの質問をご覧ください。
例えば、https://stackoverflow.com/questions/35993778/angular-2-implementation-of-shared-services をご覧ください。
または、個々の値を指定する
app / globals.ts でGlobalsクラスを作成します。
あなたのコンポーネントで:
注:Globalsサービスプロバイダーをコンポーネントではなくモジュールに直接追加できます。また、そのモジュールのすべてのコンポーネントにプロバイダーとして追加する必要はありません。
Angular2のIMHO(v2.2.3)の最善の方法は、グローバル変数を含むサービスを追加し、
@ Component
注釈内にproviders
タグなしでコンポーネントに注入することです。 これにより、コンポーネント間で情報を共有できます。グローバル変数を所有するサンプルサービス:
グローバル変数の値を更新するサンプルコンポーネント:
グローバル変数の値を読み取りするサンプルコンポーネント:
最善の方法はわかりませんが、コンポーネント内でグローバル変数を定義する場合の最も簡単な方法は、「ウィンドウ」変数を使用して次のように記述することです。
window.GlobalVariable = "これまで。!"
。ブートストラップや他の場所にインポートするために渡す必要はありません。また、すべてのJS(角度2コンポーネントだけでなく)にグローバルにアクセスできます。
それが私の使い方です。
global.ts。
それを使用するには、そのようにインポートします。
最善の方法は、オブジェクトをエクスポートしてインポートすることにより、アプリケーション全体でグローバル変数とオブジェクトを共有することです。
まず、 globals.ts などの新しい。ts ファイルを作成し、オブジェクトを宣言します。 オブジェクトタイプを与えましたが、任意のタイプまたは{{{}}}を使用することもできます。
その後、それをインポートします。
そしてそれを使用してください。
@supercobraの答えは好きですが、ES6にあるので、constキーワードを使用します。