2015-10-06 64 views
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 = {},当然它是空的。

我是这里的崇拜者,所以要提前

+0

你只需要将'localUser'对象('var localUser = {}')的初始化移出函数'getLocalUser()',使它只发生一次。如果仍然卡住,请显示“UserFactory”的所有代码,以便有人可以进一步提供帮助。 –

+0

我认为你最好使用角度服务,使用变量'localUser'作为它的一个属性(因此它只会被初始化一次)。 – VinceOPS

回答

0

由于没有测试它。但看起来像你是从userFactory到userController创建一个引用。所以,当userController被销毁时,引用没有指向任何东西。

您需要创建对象https://docs.angularjs.org/api/ng/function/angular.copy

的betetr的解决办法是让你感动登录功能userFactory的副本。当userFactory保存数据而不是用户控制器时

相关问题