[解決済み] AngularJSのグローバル変数
2022-02-02 19:35:21
質問
あるコントローラで、スコープ上の変数を初期化する問題があります。その後、ユーザーがログインすると、別のコントローラでその変数が変更されます。この変数は、ナビゲーションバーなどの制御に使用され、ユーザーのタイプに応じてサイトの一部へのアクセスを制限するため、その値を保持することが重要です。問題は、この変数を初期化したコントローラが、何らかの方法でangularから再度呼び出され、変数を初期値に戻してしまうことです。
私はこれがグローバル変数の宣言と初期化の正しい方法ではないと仮定しています。
どのように解決するのですか?
グローバル変数には、基本的に2つのオプションがあります。
-
を使う
$rootScope
http://docs.angularjs.org/api/ng.$rootScope - サービスを利用する http://docs.angularjs.org/guide/services
$rootScope
はすべてのスコープの親であり、そこで公開された値はすべてのテンプレートとコントローラで表示されます。このため
$rootScope
は、任意のコントローラにインジェクトするだけで、このスコープ内の値を変更できるので非常に簡単です。これは便利なのですが
グローバル変数の問題
.
サービスはシングルトンであり、任意のコントローラにインジェクトして、その値をコントローラのスコープで公開することができます。サービスはシングルトンであるため、依然として「グローバル」ですが、それらを使用したり公開したりする場所をはるかにうまく制御することができます。
サービスの使い方は少し複雑ですが、それほどでもありません。以下はその例です。
var myApp = angular.module('myApp',[]);
myApp.factory('UserService', function() {
return {
name : 'anonymous'
};
});
を作成し、コントローラの中で
function MyCtrl($scope, UserService) {
$scope.name = UserService.name;
}
以下は、動作中のjsFiddleです。 http://jsfiddle.net/pkozlowski_opensource/BRWPM/2/
関連
-
[解決済み] プリフライト応答が成功しない
-
[解決済み] Angular JS $locationChangeStart 次の url ルートオブジェクトを取得する
-
[解決済み] ng-repeat内で$indexを使用して、クラスを有効にしてDIVを表示するにはどうすればよいですか?
-
[解決済み] JavaScriptの変数をアンセットするには?
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] Androidでグローバル変数を宣言するには?
-
[解決済み] AngularJSのサービスをコンソールからテストするにはどうしたらいいですか?
-
[解決済み】AngularJS 数値と範囲を指定したループ
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] X-Frame-Options'を'SAMEORIGIN'に設定しているため、フレーム内での表示を拒否された。
-
[解決済み] data-ng-file-selectが動作しないのはなぜですか?
-
[解決済み] ag-gridの行の追加/削除
-
[解決済み] シンプルなangularjsの日付入力
-
[解決済み] AngularJSの$parentは何を意味するのですか?
-
[解決済み] ng-pattern` - 数字だけをチェックする方法は?
-
angularjs統合ueditor入門
-
[解決済み] AngularJS コントローラにおける 'this' と $scope の比較
-
[解決済み] 入力フィールドにフォーカスを当てるには?
-
[解決済み] JavaScriptは参照渡しですか?[重複あり]