0

我在工厂中使用资源来验证用户。我在我的控制器中设置并在我的视图中$scope.user = User.user打印出来。user.username这一切都像冠军一样工作,只是在刷新页面之前我看不到用户名。

这是我的代码简化:

HTML

<div ng-app="app">
    <div ng-controller="MainCtrl">
        {{ user.username }}
    </div>
</div>

控制器

app.controller('MainCtrl', ['$scope', '$location', 'User',
function ($scope, $location, User) {
    $scope.user = User.user;

    $scope.login = function(username, password) {
        User.login({username:username, password:password},
        function(user) {
            $scope.user = user;
            $location.path('/');
        });
    }
}]);

工厂

app.factory('User', ['$resource', '$location', function($resource, $location) {
    var currentUser = {};
    return {
        login: function(user, success, error) {
            $resource('/login').save(
                user,
                function(resp) {
                    user.isLoggedin = true;
                    currentUser = user;
                    success(user);
                },
                function(resp) {
                    alert(resp.data.message.text);
                    error(user);
                }
            );
        },
        user: currentUser
    }
}]);
4

1 回答 1

0

弄清楚了。基本上我试图改变工厂的范围。这是工作代码:

工厂:

arc.factory('User', ['$resource', function($resource) {
    return $resource('/users/:op/:id.json', {}, {
        login: { method:'POST', params:{ op:'login' } },
        logout: { method:'GET', params:{ op:'logout' } },
        getCurrentUser: { method:'GET', params:{ op:'getCurrentUser' } }
    });
}]);

控制器

arc.controller('MainCtrl', ['$scope', '$location', 'User',
    function ($scope, $location, User) {
        $scope.user = User.getCurrentUser();

        $scope.logout = function() {
            User.logout(
                function(response) {
                    $scope.user = response.user;
                    $location.path('/login');
                }
            );
        }
        $scope.login = function(username, password) {
            User.login({username:username, password:password},
            function(response) {
                $scope.user = response.user;
                $location.path('/');
            });
        }
    }]);

现在视图会按预期更新。

{{ user.name }}
于 2013-12-13T19:51:23.110 回答