我正在处理用户对象。我的服务文件:
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'
答案 0 :(得分:1)
正如documentation所说:
类对象或实例对象上的操作方法可以是 使用以下参数调用:
HTTP GET“class”操作:Resource.action([parameters],[success],[error])
非GET“类”操作:Resource.action([parameters],postData,[success],[error])
非GET实例操作:实例。$ action([参数],[成功], [错误])
因此,在您的情况下,您应该拨打$lock
而不是lock
<强>更新强>
在您的代码中发现了另一个问题。动作参数应作为第三个参数给出,而不是第二个参数。例如。
var User = $resource('/api/users/:id',
{}, //we have no default parameters
{
list: { method: 'GET' },
lock: { method: 'PATCH' }
}
);