我在AngularJS服务中设置本地存储值,并尝试在AngularJS控制器中获取值。但在控制器中,获取空值而不是我在服务中设置的值。从AngularJS服务到控制器的JavaScript本地存储值
这里是我已经设置了本地存储值的服务:
app.factory('accountService', ['$http', '$q', 'serviceBasePath', 'userService', '$window', function ($http, $q, serviceBasePath, userService, $window) {
var fac = {};
fac.login = function (user) {
var obj = { 'username': user.username, 'password': user.password, 'grant_type': 'password' };
Object.toparams = function ObjectsToParams(obj) {
var p = [];
for (var key in obj) {
p.push(key + '=' + encodeURIComponent(obj[key]));
}
return p.join('&');
}
var defer = $q.defer();
$http({
method: 'post',
url: serviceBasePath + "/token",
data: Object.toparams(obj),
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).then(function (response) {
userService.SetCurrentUser(response.data);
// The local storage value I have set
localStorage.setItem('IsAuthenticated', true);
localStorage.setItem('userName', response.username);
defer.resolve(response.data);
}, function (error) {
defer.reject(error.data);
})
return defer.promise;
}
fac.logout = function() {
userService.CurrentUser = null;
userService.SetCurrentUser(userService.CurrentUser);
}
return fac;
}])
这里就是我想获得先前设定的本地存储值时,控制器:
app.controller('indexController', ['$scope', 'accountService', '$location', '$window', function ($scope, accountService, $location, $window) {
$scope.message = localStorage.getItem("IsAuthenticated");
console.log($scope.message);
$scope.logout = function() {
accountService.logout();
$location.path('/login');
}
}])
问题是我得到的是空值而不是我在服务中设置的值。
任何帮助请!
请使用Chrome调试工具检查您的本地存储。该值是存储在本地存储还是不存在 – cfprabhu
[MCVE](http://stackoverflow.com/help/mcve)是必要的。除了你之外,没有人知道那里发生了什么。如果它为空,则最合理的解释是该值未设置。 – estus
如果你永远不会调用“登录”...为什么,为什么重载对象?你正在使用超载只有一次!!!!! – Nico