2013-04-13 59 views
0

我正在處理用戶對象。我的服務文件:取消設置/設置對象標誌並保留更改

angular.module('UserService',['ngResource']).factory('User', function($resource){ 
    var User = $resource('/api/users/:id', 
     { 
      list: { method: 'GET' }, 
      lock: { method: 'PATCH' } 
     } 
    ); 
    return User; 
}); 

用戶的上市運作良好

<div ng:controller="UserController"> 
    <ul> 
     <li ng-repeat="user in users"> 
      <a ng:click="select(user)"> 
       {{user.first_name}} {{user.last_name}} 
      </a> 
     </li> 
    </ul> 
</div> 

而且項目文件:

var app = angular.module('module-users', ['UserService']); 

app.config(function($routeProvider, $interpolateProvider) { 
    $routeProvider.when('/', { 
     controller: UserController, 
     templateUrl: Routing.generate('template_user_list') 
    }); 
}); 


function UserController($scope, User){ 
    $scope.users = User.query(); 

    $scope.selectedUser = null; 

    $scope.select = function(user){ 
     $scope.selectedUser = user; 
    } 

    $scope.lock = function(user){ 
     user.lock(); 
     console.log('lock user'); 
    } 
} 

然而,當我想執行一個用戶鎖定/解鎖我得到一個該方法未知的錯誤消息。任何想法什麼是錯的?我如何通過服務執行鎖定?還有其他建議嗎?

TypeError: Object #<Resource> has no method 'lock' 

回答

1

由於documentation說:

類對象或實例對象上的操作方法可以調用 使用以下參數:

HTTP GET 「下課」 的行動:Resource.action ([參數],[成功],[錯誤])

非GET「類」操作:Resource.action([parameters],postData,[success],[error])

非GET實例動作:例如$行動([參數],[成功], [錯誤])

因此你的情況,你應該叫$lock代替lock

UPDATE

在代碼中發現了另一個問題。動作參數應作爲第三個參數給出,而不是第二個參數。例如。

var User = $resource('/api/users/:id', 
     {}, //we have no default parameters 
     { 
      list: { method: 'GET' }, 
      lock: { method: 'PATCH' } 
     } 
    );