Я хочу поддерживать состояние пользователя между разными Угловыми контроллерами. Я использую 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 = {} и, конечно, пуст.
Я здесь wannabe, так что будьте добры
заранее спасибо
не проверили его. Но похоже, что вы создаете ссылку с userFactory на userController. Поэтому, когда userController уничтожается, ссылка не указывает на ничего.
Вам необходимо создать копию объекта https://docs.angularjs.org/api/ng/function/angular.copy
Решение betetr должно было бы перевести ваши функции входа в userFactory. Когда userFactory будет хранить данные, а не userCOntroller
localUser
(var localUser = {}
) из функцииgetLocalUser()
чтобы это происходило только один раз. Если вы все еще застряли, покажите весь код для вашейUserFactory
чтобы кто-то мог помочь в дальнейшем.