2013-04-13 5 views
0

Я имею дело с объектами пользователя. Мой файл службы:Unset/Установить флаг объекта и сохранить изменения

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' } 
     } 
    ); 
Смежные вопросы