0
我希望在不同的角度控制器之间保持用户状态。我正在使用JWT进行身份验证,并且可以使用它在每个控制器上安全地从服务器返回用户属性,但每次执行控制器切换时都是完整的循环法。在这样如何使用Angular工厂在角度控制器之间保持状态
function getLocalUser() {
var localUser = {};
return {
isSet:isSet,
get:get,
set:set
};
function isSet(){
return (Object.keys(localUser).length > 0)
};
function get() {
return localUser
};
function set(U){
Object.keys(U).forEach(function (c,i,a){
localUser[c] = U[c];
})
}
}
的UserController的日志:
所以我添加下面的方法来我UserFactory
function login(username, password) {
UserFactory.login(username, password).then(function success(response) {
$scope.vm.loggedInUser = response.data.user;
$scope.vm.username = null;
$scope.vm.password = null;
UserFactory.getLocalUser().set($scope.vm.loggedInUser);
},handleError);
}
这清楚地工作,但是当我移动到下一个控制器:
$scope.vm = {};
// initialize
if (UserFactory.getLocalUser().isSet) {
$scope.vm.loggedInUser = UserFactory.getLocalUser().get();
} else {
UserFactory.getUser().then(function success(response) {
$scope.vm.loggedInUser = response.data;
});
}
致电
UserFactory.getLocalUser().isSet
再次初始化var localUser = {},当然它是空的。
我是这里的崇拜者,所以要提前
你只需要将'localUser'对象('var localUser = {}')的初始化移出函数'getLocalUser()',使它只发生一次。如果仍然卡住,请显示“UserFactory”的所有代码,以便有人可以进一步提供帮助。 –
我认为你最好使用角度服务,使用变量'localUser'作为它的一个属性(因此它只会被初始化一次)。 – VinceOPS