如何仅使用Restangular设置一些字段?

时间:2013-08-08 10:41:57

标签: javascript rest angularjs restangular

假设我有一个包含多个字段的资源,其中一些是只读的。或者它们可能属于我想在服务器上以不同方式处理的不同用例。

例如,我的bing资源如下所示:

{id: 1,
 foo: "A", 
 bar: "B", 
 createdAt: "2013-05-05"}

我想让Restangular到PUT只有一些字段,执行像:

这样的请求
PUT /bing/1 {foo: "A"}
PUT /bing/1 {bar: "B"}
PUT /bing/1 {foo: "A", bar: "B"}

想要做的是:

PUT /bing/1 {id: 1, foo: "A", bar: "B", createdAt: "2013-05-05"}

我怎样才能实现它?

3 个答案:

答案 0 :(得分:22)

我是Restangular的创造者。

@Nicholas绝对正确:)。那是PATCH而不是PUT。而Restangular确实支持它:)。

如果elem已经是elem.patch({foo: 2})对象,那么

restangularized将成为可能。

希望这会有所帮助!!

答案 1 :(得分:6)

这是PATCH而不是PUT

请参阅https://tools.ietf.org/html/rfc5789

答案 2 :(得分:2)

执行此操作的一种方法是将整个对象传递给patch方法,包括您不希望发送到后端的所有字段,然后在请求之前使用请求拦截器删除任何不需要的字段发送。

例如,要始终从任何补丁请求中删除字段createdAt,您可以执行类似

的操作
app.config(function(RestangularProvider) {
  RestangularProvider.setRequestInterceptor(function(element, operation, route, url) {
    if (operation === 'patch') {
      delete element.createdAt;
      return element;
    } 
  });
});

要详细了解请求拦截器,请参阅setRequestInterceptor

上的文档