Angularjs 取消设置/设置对象的标志并保留更改

Angularjs 取消设置/设置对象的标志并保留更改,angularjs,angularjs-service,Angularjs,Angularjs Service,我正在处理用户对象。我的服务文件: angular.module('UserService',['ngResource']).factory('User', function($resource){ var User = $resource('/api/users/:id', { list: { method: 'GET' }, lock: { method: 'PATCH' } } ); r

我正在处理用户对象。我的服务文件:

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>
但是,当我想要执行用户锁定/解锁时,我会收到一条错误消息,说明该方法未知。有什么想法吗?怎么了?如何通过服务执行锁定?还有其他建议吗

TypeError: Object #<Resource> has no method 'lock'
TypeError:对象#没有方法“lock”
如前所述:

类对象或实例对象上的操作方法可以是 使用以下参数调用:

HTTP获取“类”操作:Resource.action([parameters]、[success]、[error])

非获取“类”操作:Resource.action([parameters]、postData、[success]、[error])

非获取实例操作:实例.$action([参数],[成功], [错误])

因此,在您的情况下,应该调用
$lock
,而不是
lock

更新

发现了代码中的另一个问题。动作参数应作为第三个参数给出,而不是第二个参数。例如

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