web-dev-qa-db-ja.com

Angularjs-サービスでモジュール値を設定するにはどうすればよいですか?

Angularアプリ用の次のサービスモジュールがあります。

angular.module('rs.services', [])
  .value('uid', null)

  .factory('login', ['$http', 'uid', function($http, uid) {
    return function(user, pass) {
      var p = $http.post('/login', {"user": user, "pass": pass})
        .success(function(data, status, headers, config) {
          // set uid
        })
        .error(function(data, status, headers, config) {
          // do something
        });

      return p;
    }
  }]);

  // a service that uses uid to authenticate the request
  .factory('userPrefs' ['$http', 'uid', function($http, uid) {
    return function() {
      return $http.post('/user/prefs', {"uid": uid});
    }
  }]);

ユーザーがログインした後、loginサービスは一意のセッションIDを返します。他のサービス呼び出しが参照するように、モジュールのuid値を設定したいと思います。

モジュールの構成段階で依存関係として値を使用できないため、上記のコードは機能しないと確信しています。 uidサービスでlogin値を設定し、モジュール内の他のサービスでアクセスするにはどうすればよいですか。それが不可能な場合は、これらによって設定/取得できる値を作成するにはどうすればよいですか。サービス?

20
jtfairbank

プリミティブである値は、アプリケーションの過程で変化する情報を保持することを意図したものではありません。 UID値はobjectまたは標準サービスのいずれかである必要があります。オブジェクトとして:

.value( 'uid', {} );

.factory('userPrefs' ['$http', 'uid', function($http, uid) {
  // ...
  uid.id = response.data.uid;
  // ...
});

また、ユーザーに関連するすべてのものを3つではなく1つのサービスに配置することもできます。詳細については、この他のSO投稿を参照してください: https://stackoverflow.com/a/14206567/259038

26