ngResource:自定义更新方法清理实例
ngResource: Custom update method cleans the instance
我用 $resource
做这个 Customer
服务:
.factory('Customer', function($resource, apiURL){
return $resource(apiURL+'customers/:id', { id: '@id' }, {
'update': {method: 'PUT'}
})
})
当我更新 customer
(那是 Customer
服务的一个实例),并且在 promise 已解决,customer
变量已清理。为什么?
$scope.customer = Customer.get({id: $stateParams.id}, function (){
console.log($scope.customer) // Object {id: 1, name: 'John Doe', ...}
$scope.customer.$update()
.then(function () {
console.log($scope.customer) // Object { status: true, $promise: Object, $resolved: true }
})
});
When I update the customer (that is a Instance of Customer service), and after the promise is resolved, the customer var is cleaned. Why?
当 $update
解析时,它会清除并使用新数据更新 $resource
对象。您的服务器 return 正在处理空数据。
如果要更新而不清除对象,将更新后的对象放在Customer.update
方法的第二个参数中。
Customer.update({id: $stateParams.id}, $scope.customer);
或修改您的服务器以return更新信息。
我基于 JSON 文件用 json-server
(https://github.com/typicode/json-server) 创建了一个简单的服务:
{
"customers": [
{
"id": 1,
"name": "John Doe",
"age": 25
}
]
}
我也 copy-pasted 您的代码(我做的唯一改变是使用 1
而不是 $stateParams.id
)并使用上述服务和 angular-resource v1 对其进行了测试.4.8.没有这样的问题——两个控制台日志显示完全相同的输出。也许问题是由 server-side 代码引起的?我想不出为什么这在 Angular 中不起作用(旧版本 angular-resource 除外)。
更新
服务上的 PUT
方法不仅应该更新服务器上的客户,而且 return 更新的对象。如果没有,您的 $scope.customer 将替换为从服务中 return 编辑的空对象。
我用 $resource
做这个 Customer
服务:
.factory('Customer', function($resource, apiURL){
return $resource(apiURL+'customers/:id', { id: '@id' }, {
'update': {method: 'PUT'}
})
})
当我更新 customer
(那是 Customer
服务的一个实例),并且在 promise 已解决,customer
变量已清理。为什么?
$scope.customer = Customer.get({id: $stateParams.id}, function (){
console.log($scope.customer) // Object {id: 1, name: 'John Doe', ...}
$scope.customer.$update()
.then(function () {
console.log($scope.customer) // Object { status: true, $promise: Object, $resolved: true }
})
});
When I update the customer (that is a Instance of Customer service), and after the promise is resolved, the customer var is cleaned. Why?
当 $update
解析时,它会清除并使用新数据更新 $resource
对象。您的服务器 return 正在处理空数据。
如果要更新而不清除对象,将更新后的对象放在Customer.update
方法的第二个参数中。
Customer.update({id: $stateParams.id}, $scope.customer);
或修改您的服务器以return更新信息。
我基于 JSON 文件用 json-server
(https://github.com/typicode/json-server) 创建了一个简单的服务:
{
"customers": [
{
"id": 1,
"name": "John Doe",
"age": 25
}
]
}
我也 copy-pasted 您的代码(我做的唯一改变是使用 1
而不是 $stateParams.id
)并使用上述服务和 angular-resource v1 对其进行了测试.4.8.没有这样的问题——两个控制台日志显示完全相同的输出。也许问题是由 server-side 代码引起的?我想不出为什么这在 Angular 中不起作用(旧版本 angular-resource 除外)。
更新
服务上的 PUT
方法不仅应该更新服务器上的客户,而且 return 更新的对象。如果没有,您的 $scope.customer 将替换为从服务中 return 编辑的空对象。