Подтвердить что ты не робот

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 возвращает уникальный идентификатор сеанса, и я хочу установить значение модуля uid для вызова других служб.

Я уверен, что вышеуказанный код не будет работать, потому что я не могу использовать значение в качестве зависимости на этапе конфигурации модуля. Как установить значение uid в службе login и получить доступ к нему в других службах модуля, или если это невозможно, как я могу сделать значение, которое можно установить/получить с помощью этих служб?

4b9b3361

Ответ 1

Значения, которые являются примитивами, не предназначены для хранения информации, которая изменяется во время вашего приложения. Вы должны либо иметь значение UID, либо объект или стандартную службу. В качестве объекта:

.value( 'uid', {} );

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

Вы также можете поместить все свои материалы, связанные с пользователем, в одну службу вместо трех. См. Эту другую публикацию SO для получения дополнительной информации: fooobar.com/info/63467/...