[解決済み] Angular 4/5/6 グローバル変数
質問
Angular 2アプリケーションでグローバル変数を作成するのに苦労しています。
というファイルを持っています。 globals.ts というファイルがあり、それは次のようになります。
import { Injectable } from "@angular/core";
@Injectable()
export class Globals {
var role = 'test';
}
そして、このようにコンポーネントのHTMLビューで変数roleを使いたいのです。
{{ role }}
私はすでにglobals.tsファイルを私の app.module.ts を以下のような形で追加しています。
providers: [
Globals
],
このファイルで何をやっても、うまくいきませんでした。私がやりたくないのは、すべてのコンポーネントで globals.ts ファイルを手動でインポートしなければならないことです。
どのように解決するのですか?
以下のように
Globals
エンティティにアクセスできます。
Angular依存性注入
. を出力したい場合
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(public globals: Globals) {}
}
私が提供した
Globals
の中に
HelloComponent
で提供されるかもしれませんが、代わりにいくつかの
HelloComponent's
の親コンポーネントや、あるいは
AppModule
. これは
Globals
が変更できない静的なデータしか持っていない場合(例えば定数のみ)には問題ないでしょう。しかし、そうではなく、例えば異なるコンポーネントやサービスがそのデータを変更したい場合は
Globals
は
シングルトン
. その場合、それが使用される階層の最上位に提供されるべきです。例えば、これが
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
]
})
また var を使うことはできません。
// globals.ts
import { Injectable } from '@angular/core';
@Injectable()
export class Globals {
role: string = 'test';
}
更新
ようやく、簡単な
のデモを作成しました。
を作成し、そこに単一の
Globals
が 3 つのコンポーネントで共有されており、そのうちの 1 つが
Globals.role
.
関連
-
[解決済み] Angular 2の「コンポーネント」は既知の要素ではありません。
-
[解決済み] Angular HTMLバインディング
-
[解決済み] Angular:*ngClassを使った条件付きクラス
-
[解決済み] モジュール "@angular-devkit/build-angular" が見つかりませんでした。
-
[解決済み] ng buildの後にangular-cliのdist-folderのパスを変更するには?
-
[解決済み] Angular 2におけるEventEmitter.next()とEventEmitter.emit()の相違点
-
[解決済み] Angular v5からAngular v6にプロジェクトをアップグレードしたい。
-
[解決済み] AngularでFormArrayからすべての項目を削除する
-
[解決済み] RxJSのmap演算子でエラーを出す方法 (angular)
-
[解決済み] Karma/Jasmineのテストで「[object ErrorEvent] thrown」エラーが発生した場合、どのようにデバッグすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ng buildの後にangular-cliのdist-folderのパスを変更するには?
-
[解決済み] Angular 2におけるEventEmitter.next()とEventEmitter.emit()の相違点
-
[解決済み] コンポーネントクラスからテンプレート参照変数にアクセスする
-
[解決済み] Angularで、コントロールが作成された後、FormControlにバリデータを追加する方法は?
-
[解決済み] Angular / Angular Materialでmat-horizontal-stepperのステップをプログラムで移動させることは可能ですか?
-
[解決済み] 文字列|ヌル'型の引数は、文字列'型のパラメータに代入できません。タイプ 'null' はタイプ 'string' に割り当てられません。
-
[解決済み] Angular2 bodyタグにクラスを追加する
-
[解決済み] AngularでFormArrayからすべての項目を削除する
-
[解決済み] RxJSのmap演算子でエラーを出す方法 (angular)
-
[解決済み] Karma/Jasmineのテストで「[object ErrorEvent] thrown」エラーが発生した場合、どのようにデバッグすればよいですか?