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
и получить доступ к нему в других службах модуля, или если это невозможно, как я могу сделать значение, которое можно установить/получить с помощью этих служб?
Ответы
Ответ 1
Значения, которые являются примитивами, не предназначены для хранения информации, которая изменяется во время вашего приложения. Вы должны либо иметь значение UID, либо объект или стандартную службу. В качестве объекта:
.value( 'uid', {} );
.factory('userPrefs' ['$http', 'uid', function($http, uid) {
// ...
uid.id = response.data.uid;
// ...
});
Вы также можете поместить все свои материалы, связанные с пользователем, в одну службу вместо трех. См. Эту другую публикацию SO для получения дополнительной информации: fooobar.com/info/63467/...