2013-12-12 61 views
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 
    } 
}]); 

回答

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