Taerus
Taerus

Reputation: 475

AngularJS data gets "reset" after refresh

I have a very basic login service, no real authentication, but when if i redirect with a page refresh using $window.location.href the data is lost. When the user gets 'logged in' and the page is redirected to the homepage, instead its resolves as loggedIn = false and redirects back to the login page.

How can i prevent this from happening?

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;
    }
}

app module

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

Upvotes: 0

Views: 1571

Answers (2)

jrkt
jrkt

Reputation: 2715

Store the user data in Local Storage and populate the input fields with that data if it's available. A useful object for storage data in Local Storage:

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) {

        }
    }
};

To store data:

LocalStorageManager.setValue("key",data);

To retrieve that data:

LocalStorageManager.getValue("key");

Upvotes: 0

Taerus
Taerus

Reputation: 475

Thinking in another perspective made me find an answer. I just needed to put a watch on the controller that needs the data 'refreshed' instead of trying to refresh the page as a whole.

As follows:

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

Cheers.

Upvotes: -1

Related Questions