AngularJSのグローバル変数 質問する

AngularJSのグローバル変数 質問する

コントローラーのスコープで変数を初期化しているときに問題が発生します。その後、ユーザーがログインすると、別のコントローラーで変数が変更されます。この変数は、ナビゲーション バーなどの制御に使用され、ユーザーのタイプに応じてサイトの各部分へのアクセスを制限するため、値を保持することが重要になります。問題は、変数を初期化するコントローラーが何らかの方法で Angular によって再度呼び出され、変数が初期値にリセットされることです。

これはグローバル変数を宣言して初期化する正しい方法ではないと思います。実際にはグローバルではないので、私の質問は、正しい方法と、現在のバージョンの Angular で動作する良い例があるかどうかです。

ベストアンサー1

「グローバル」変数には基本的に 2 つのオプションがあります。

$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/

おすすめ記事