防止ngResource在$ save上要求退回的项目

时间:2014-01-31 01:40:54

标签: javascript angularjs angular-resource

似乎当我在我的资源上保存或使用自定义$ update(put或post)方法时,它希望返回新发布的文档。我不想从我的保存/后期操作中返回任何内容但是返回ok / 200 /错误类型的语句,但这样做会导致项目在保存后立即为空。

var item = Things.get({
 id: $route.current.params.id
}, function() {
 console.log(item);  // Item is ok
}); 

var item = Things.get({
 id: $route.current.params.id
}, function() {
 console.log(item);  // Item is blank (because server returned just 'ok')
 item.$save();
}); 

2 个答案:

答案 0 :(得分:2)

当您执行$save()时,会有一个validation来检查是否有任何数据被返回,如果是这样的话,响应将是copied到原始对象(在你的案件item

这是从服务器接收响应时的回调:

var promise = $http(httpConfig).then(function(response) {
  var data = response.data,
      promise = value.$promise;

  if (data) {
    // Need to convert action.isArray to boolean in case it is undefined
    // jshint -W018
    if (angular.isArray(data) !== (!!action.isArray)) {
      throw $resourceMinErr('badcfg', 'Error in resource configuration. Expected ' +
        'response to contain an {0} but got an {1}',
        action.isArray?'array':'object', angular.isArray(data)?'array':'object');
    }
    // jshint +W018
    if (action.isArray) {
      value.length = 0;
      forEach(data, function(item) {
        value.push(new Resource(item));
      });
    } else {
      shallowClearAndCopy(data, value);
      value.$promise = promise;
    }
  }

  value.$resolved = true;

  response.resource = value;

  return response;
}, function(response) {
  value.$resolved = true;

  (error||noop)(response);

  return $q.reject(response);
});

您可以查看完整源代码here

因此,如果您不想覆盖您的对象,那么就不要从服务器发送有关响应的任何数据。

答案 1 :(得分:0)

如果您的服务器返回204(无内容),则一旦保存完成,它将无法替换资源。