取消设置/设置对象标志并保持更改

时间:2013-04-13 21:08:45

标签: angularjs angularjs-service

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

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 个答案:

答案 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' }
        }
    );