【问题标题】:Angularjs - how do I set module values in a service?Angularjs - 如何在服务中设置模块值?
【发布时间】:2013-03-25 16:25:20
【问题描述】:

我有以下 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 值以供其他服务调用参考。

我很确定上面的代码不会工作,因为我不能在模块的配置阶段使用值作为依赖项。如何在login 服务中设置uid 值并在模块内的其他服务中访问它,或者如果这不可能,我如何创建一个可以通过这些服务设置/获取的值?

【问题讨论】:

    标签: angularjs angularjs-service


    【解决方案1】:

    原语值并不意味着保存在应用程序过程中发生变化的信息。您需要将 UID 值设为 object 或标准服务。作为一个对象:

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

    您可能还希望将所有与用户相关的内容放在一个服务中,而不是三个。有关更多信息,请参阅此其他 SO 帖子:https://stackoverflow.com/a/14206567/259038

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-15
      • 2016-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      相关资源
      最近更新 更多