ngResource:自定义更新方法清除实例

时间:2016-01-16 18:51:15

标签: angularjs ngresource

我使用Customer进行此$resource服务:

.factory('Customer', function($resource, apiURL){
    return $resource(apiURL+'customers/:id', { id: '@id' }, {
        'update': {method: 'PUT'}
    })
})

当我更新customerCustomer服务的实例)时, promise 解析后,{{ 1}} var已清理。为什么呢?

customer

2 个答案:

答案 0 :(得分:1)

  

当我更新客户(即客户服务实例)时,在解决了承诺后,客户var将被清除。为什么呢?

$update结算时,它会清除并使用新数据更新$resource对象。您的服务器正在返回空数据。

如果要在不清除对象的情况下进行更新,请将更新的对象放在Customer.update方法的第二个参数中。

Customer.update({id: $stateParams.id}, $scope.customer);

或修改您的服务器以返回更新的信息。

答案 1 :(得分:0)

我基于JSON文件使用json-serverhttps://github.com/typicode/json-server)创建了一个简单的服务:

{
  "customers": [
    {
      "id": 1,
      "name": "John Doe",
      "age": 25
    }
  ]
}

我还复制粘贴了您的代码(我做的唯一更改是使用1而不是$stateParams.id)并使用上述服务和角度资源v1.4.8进行测试。没有这样的问题 - 两个控制台日志显示完全相同的输出。也许问题是由服务器端代码引起的?我想不出为什么这在Angular中不起作用的任何原因(除了较旧版本的angular-resource之外)。

<强>更新

您对服务的PUT方法不仅应更新服务器上的客户,还应返回更新的对象。如果没有,则$ scope.customer将替换为从服务返回的空对象。