Angularjs 如何使用角度工厂在角度控制器之间保持状态
我希望在不同的角度控制器之间保持用户状态。我使用JWT进行身份验证,并且可以使用它从每个控制器上的服务器安全地返回用户属性,但每次切换控制器时,这是一个完整的循环 因此,我在UserFactory中添加了以下方法:Angularjs 如何使用角度工厂在角度控制器之间保持状态,angularjs,state,factories,Angularjs,State,Factories,我希望在不同的角度控制器之间保持用户状态。我使用JWT进行身份验证,并且可以使用它从每个控制器上的服务器安全地返回用户属性,但每次切换控制器时,这是一个完整的循环 因此,我在UserFactory中添加了以下方法: function getLocalUser() { var localUser = {}; return { isSet:isSet, get:get, set:set }; function isSet(){ return
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登录以便:
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={},当然它是空的
我是这里的人,所以请善待我
提前感谢您还没有测试过它。但看起来您正在创建从userFactory到userController的引用。因此,当userController被销毁时,引用没有指向任何内容 您需要创建对象的副本
betetr解决方案是将您的登录功能移动到userFactory。当userFactory将保存数据而不是userCOntroller时,您只需将
localUser
对象(var localUser={}
)的初始化从函数getLocalUser()
中移出,以便只发生一次。如果您仍然被卡住,请显示您的UserFactory
的所有代码,以便有人可以进一步提供帮助。我认为您最好使用角度服务,将变量“localUser”作为其属性之一(因此它将只初始化一次)。