2015-02-04 6 views
0

У меня очень простая служба регистрации, нет подлинной аутентификации, но когда я перенаправляюсь с обновлением страницы, используя $ window.location.href, данные теряются. Когда пользователь получает «вход в систему», и страница перенаправляется на главную страницу, вместо этого ее разрешает как loggedIn = false и перенаправляет обратно на страницу входа.Данные AngularJS получают «сброс» после обновления

Как я могу предотвратить это?

Code snippets: 

LoginController

ApiService.getUser($scope.user) 
       .success(function (data) { 
        UserService.user = data; 
        UserService.isLogged = true; 
        $window.location.href = '/'; 
       }) 

UserService

return { 
     user: {}, 
     isLogged: false 
    }; 

RequireLoginService

return { 
    loginRequired: function() { 
     var deferred = $q.defer(); 

     if (!UserService.isLogged) { 
      deferred.reject(); 
      $location.path('/login'); 
     } else { 
      deferred.resolve() 
     } 

     return deferred.promise; 
    } 
} 

модуль приложения

$routeProvider 
    .when('/', { 
     templateUrl: 'views/sheet.html', 
     controller: 'SheetCtrl', 
     resolve: { 
      loginRequired: function(RequireLoginService) { 
       return RequireLoginService.loginRequired(); 
      } 
     } 
    }) 
+0

использование $ location.path() вместо окна. местоположение так же, как вы это делаете в RequireLoginService –

+0

Это то, что я делал раньше, но мне нужно обновить страницу входа, у меня есть контроллер для моего навигатора, который находится за пределами ng-view, для которого требуется обновление на всей странице. sh Правильные данные. – Taerus

+1

Когда вы обновляете страницу, ваше приложение перезапускается. Вы должны использовать локальное хранилище или файлы cookie для хранения информации о пользователе. –

ответ

-1

мышления в другой перспективе заставило меня найти ответ. Мне просто нужно было поставить часы на контроллер, который нуждается в обновлении данных, вместо того, чтобы обновлять страницу в целом.

Как следует:

$scope.$watch(function() { return UserService.user.username; }, function (value) { 
     $scope.user = value; 
    }); 

Приветствия.

0

Храните данные пользователя в локальном хранилище и заполняйте поля ввода этими данными, если они доступны. Полезный объект данных для хранения на локальном диске:

var LocalStorageManager = { 
    setValue: function(key, value) { 
     window.localStorage.setItem(key, JSON.stringify(value)); 
    }, 
    getValue: function(key) { 
     try { 
      return JSON.parse(window.localStorage.getItem(key)); 
     } catch (e) { 

     } 
    } 
}; 

Для хранения данных:

LocalStorageManager.setValue("key",data); 

Чтобы получить эти данные:

LocalStorageManager.getValue("key"); 
+0

Насколько безопасно это решение? – Claus

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