【问题标题】:Scope property doesn't update until page refresh范围属性在页面刷新之前不会更新
【发布时间】:2013-12-14 03:51:23
【问题描述】:

我在工厂中使用资源来验证用户。我在控制器中设置了$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
    }
}]);

【问题讨论】:

    标签: angularjs angularjs-scope angularjs-resource


    【解决方案1】:

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

    工厂:

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

    【讨论】:

      猜你喜欢
      • 2014-11-25
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      相关资源
      最近更新 更多