Restangular - Как создать API поверх него

Я начал использовать Restangular для своего проекта AngularJS и хочу создать службу, использующую Restangular, для вызовов REST. Сервис будет иметь такую ​​функцию:

getAll
$scope.account = save($scope.account)
$scope.account = update(account)

Теперь, когда вызов Restangular возвращает обещание внутри службы, которое должно быть вызвано как then() для получения результатов, как мне вернуть извлеченный или обновленный результат из моей оболочки службы?

Я хочу создать API-интерфейс оболочки, чтобы у меня была любая другая бизнес-логика после получения записи, а затем возвращать результат из API моего сервиса. Я могу использовать службу Restangular непосредственно в своем контроллере, но мне нужно, чтобы из контроллера вызывался надлежащий уровень службы, который вернул бы мне результат вызова REST, а не просто обещание.

Джей


person jd.tech20    schedule 31.03.2014    source источник


Ответы (1)


Вам нужно будет использовать цепочку обещаний.

Итак, в вашем сервисе у вас будет (обратите внимание, что мы возвращаем обещание):

this.save = function(newAccount) {
  ..... // Do business logic on account before submit
  return restangular.all('accounts').post(newAccount).then(function(result){
    ...... // Do business logic after successful save
    return newAccount;
  }, function(error){
    ...... // Do business logic on error
  });
};

А затем внутри вашего контроллера:

$scope.saveAccount = function(newAccount) {
  service.save(newAccount).then(function(savedAccount){
    $scope.account = savedAccount;
  }, function(errror) {
   ..... // Error handling
  });
};
person Beyers    schedule 31.03.2014
comment
Спасибо. Мои сохранения, обновления и getList работают. Мое удаление имеет двойную цепочку обещаний. Подскажите, пожалуйста, как его связать? this.remove = function(account) { return Restangular.one(accounts, account.id).get().then(function(account) { account.remove().then(function(result){ return result; }) , function(error){ // Выполняем бизнес-логику при ошибке }; }); } - person jd.tech20; 31.03.2014
comment
На самом деле я снова связал обещание взамен, и это сработало. Большое спасибо. - person jd.tech20; 31.03.2014