Angularjs 服务上的属性未更新
我在登录系统上遇到了以下问题: 服务menuService上的属性未更新 工作流程: 在成功登录后,我正在更改变量menuService.isUserLoggedIn,但没有像您在console.log上看到的那样正确更新。我做错了什么/错过了什么 代码:Angularjs 服务上的属性未更新,angularjs,angular-services,Angularjs,Angular Services,我在登录系统上遇到了以下问题: 服务menuService上的属性未更新 工作流程: 在成功登录后,我正在更改变量menuService.isUserLoggedIn,但没有像您在console.log上看到的那样正确更新。我做错了什么/错过了什么 代码: app.factory('menuService', function(){ return { isUserLoggedIn: false, } }) app.factory('userService', f
app.factory('menuService', function(){
return {
isUserLoggedIn: false,
}
})
app.factory('userService', function($http, menuService){
var doLogin = function(user){
$http.post('/login', user)
.success(function(data, status, header, config){
menuService.isUserLoggedIn = true
})
.error(function(data, status, header, config){
console.log('Error ' + data)
})
}
return {
doLogin: doLogin
}
})
app.controller('LoginController', function($scope, userService, menuService){
$scope.user = {}
$scope.doLogin = function(user){
console.log(menuService.isUserLoggedIn) //FALSE
userService.doLogin(user)
console.log(menuService.isUserLoggedIn) //FALSE BUT I think should be TRUE
}
})
$http.post是异步的,因此您需要返回其承诺,并在完成时使用.then方法检查该值
app.factory('userService', function($http, menuService){
var doLogin = function(user){
return $http.post('/login', user)
.then(function(){
menuService.isUserLoggedIn = true
}, function(response){
console.log('Error ' + response.data)
});
};
return {
doLogin: doLogin
}
})
app.controller('LoginController', function($scope, userService, menuService){
$scope.user = {}
$scope.doLogin = function(user){
console.log(menuService.isUserLoggedIn) //FALSE
menuService.doLogin(user).then(function() {
console.log(menuService.isUserLoggedIn);
});
}
})
但是,成功只有在帖子完成后才会执行,对吗?所以我发布的代码应该可以工作…这就是为什么原始代码不能工作的原因。它调用doLogin,它启动http调用,然后调用console.log,因为http调用仍在进行中。http调用完成后,即执行成功回调,并在console.log之后将值设置为true。