2015-10-06 3 views
0

Я хочу поддерживать состояние пользователя между различными Угловыми контроллерами. Я использую JWT для аутентификации и могу использовать это, чтобы безопасно возвращать атрибуты User с сервера на каждом контроллере, но каждый раз, когда я переключаю контроллер, это полный круглый robin.Как использовать Угловые заводы для сохранения состояния между Угловыми контроллерами

Поэтому я добавил следующий метод для моего UserFactory:

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 = {} и, конечно, пуст.

Я подражатель здесь так быть добрыми

Заранее спасибо

+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 будет хранить данные, а не userCOntroller

Смежные вопросы