AngularJS数据在刷新后被“重置”

AngularJS data gets "reset" after refresh

本文关键字:重置 数据 刷新 AngularJS      更新时间:2023-09-26

我有一个非常基本的登录服务,没有真正的身份验证,但是当我使用 $window.location.href 刷新页面重定向时,数据会丢失。当用户"登录"并且页面被重定向到主页时,它解析为 loggedIn = false 并重定向回登录页面。

我怎样才能防止这种情况发生?

Code snippets:

登录控制器

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

用户服务

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

需要登录服务

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

将用户数据存储在本地存储中,并使用该数据填充输入字段(如果可用)。本地存储中存储数据的有用对象:

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");

从另一个角度思考让我找到了答案。我只需要在需要"刷新"数据的控制器上放置一个手表,而不是尝试刷新整个页面。

如下:

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

干杯。