2014-12-21 3 views
6

Я использую restangular, но у меня есть проблема с методом «PUT», он не работает, как ожидалосьКак использовать метод PUT в restangular

Мой angularService код

var userService = function (restangular) { 
      var resourceBase = restangular.all("account/"); 

      restangular.addResponseInterceptor(function (data, operation, what, url, response, deferred) { 
       if (operation == "getList") { 
        return response.data; 
       } 
       return response; 
      }); 
     this.getUserById = function (id) { 

       return resourceBase.get(id); 
       // return restangular.one("account", id).get(); 
      }; 
      this.updateUser = function(user) { 
       return user.Put(); 
      }; 
} 

Мой код контроллера

var userEditController = function (scope, userService, feedBackFactory, $routeParams) { 

     scope.user = undefined; 

     scope.updateUser = function() { 

      userService.updateUser(scope.user).then(function (data) { 
       feedBackFactory.showFeedBack(data); 
      }, function (err) { 
       feedBackFactory.showFeedBack(err); 
      }); 
     }; 

     userService.getUserById($routeParams.id).then(function (data) { 
      scope.user = data.data; **// Please not here I am reading the object using service and this object is getting updated and pass again to the service for updating** 

     }, function (er) { 

      feedBackFactory.showFeedBack(er); 
     }); 

    }; 

но я получаю сообщение об ошибке «Put» не является функцией, я проверил объект пользователя и обнаружил, что пользовательский объект не является restangularized (никаких дополнительных методов для унд). Как это решить?

ответ

2

Вы можете использовать метод только для объектов, связанных с соединением. Чтобы запустить объект на предмет, вам нужно проверить метод put, если объект не содержит метода put, тогда вам нужно преобразовать этот объект в restangularized object.

Изменить updateUser к следующему:

this.updateUser = function(user) { 
    if(user.put){ 
     return user.put(); 
    } else { 
     // you need to convert you object into restangular object 
     var remoteItem = Restangular.copy(user); 

     // now you can put on remoteItem 
     return remoteItem.put(); 
    } 
}; 

метод Restangular.copy добавит некоторые дополнительные restangular методы в объект. Короче говоря, он преобразует любой объект в restangularized объект.

+0

Как вы сообщили ему, что тип «пользователь»? например, я получаю 'http: // localhost: 8100/api/undefined' при использовании метода' copy() '. Предполагается, что 'undefined' является объектом' user'. Как все исправить? Благодаря! –

10

Вы можете только «положить» на объект данных.

customPUT([elem, path, params, headers]) - это то, что вы хотите. используйте его следующим образом:

Restangular.all('yourTargetInSetPath').customPUT({'something': 'hello'}).then(
    function(data) { /** do something **/ }, 
    function(error) { /** do some other thing **/ } 
); 
Смежные вопросы