2015-04-23 15 views
0

我遇到了$resources問題,我真的不知道什麼時候我可以簡單地指定一個變量爲$resource響應var user = Users.getCurrent()或者當我已經使用callBack。

我創建了一個service它綁定到resource

.factory('Users', function ($resource, gcAPICOACH) { 
    return $resource(gcAPICOACH + 'users/current',{}, 
     { 
     'getCurrent': {method: 'GET' }, 
     'save': {method: 'PUT'} 

     }); 
    }); 

我有我使用的授權

.factory('gcAuth', function ($rootScope, $log) { 
    var currentUser; 

    return { 
     login: function (user) { 
     currentUser = user; 
     $rootScope.$emit('notify', {type: 'info', title: gettext('Welcome'), text: user.name}); 
     $rootScope.$broadcast('user.logged', user, $rootScope.next); 

     }, 
     isLoggedIn: function() { 
     return !angular.isUndefined(currentUser); 
     }, 
     currentUser: function() { 
     return currentUser; 
     } 
    }; 
    }); 

現在我做了登錄功能簡單的登錄控制器的服務。 這裏是問題,我應該使用哪一個?

$scope.login = function() { 
//option 1 
     Users.getCurrent(function (user) { 
     $log.debug("inside"); 
     gcAuth.login(user); 
     }); 
//option 2 
     gcAuth.login(Users.getCurrent()); 
    }; 

和HTML調用的函數:

<p><a class="btn btn-lg btn-success" ng-hide="user" ng-click="login()">Login!<span class="glyphicon glyphicon-ok"></span></a></p> 

注:我已經設置該用戶令牌攔截器,所以當我打電話currentUser它實際上返回正確的對象

文檔狀態:

認識到調用$ resource對象方法立即返回一個空引用(依賴於isArray的對象或數組)是很重要的。一旦從服務器返回數據,現有參考將填入實際數據。這是一個有用的技巧,因爲通常資源被分配給一個模型,然後由該模型渲染。

這很清楚,渲染沒有問題,但在這種情況下,角的「魔術」沒有效果。我對麼?

PS:我的另一個問題是Users.getCurrent()返回的對象也有角函數,如$promise和co。我怎樣才能找回乾淨的對象?

回答

0

您應該使用選項1. $resource方法始終是異步,所以不會立即返回一個對象,只有參考含空的佔位符,Ajax調用加載之後被填充。

您可以使用angular.fromJson(angular.toJson(user))來獲得乾淨的物體。相關的回答問題:Strip or overwrite an AngularJS $resource

相關問題