如何使用 angular 资源发送带有数组的对象?
How to send objects with arrays using angular resource?
我有一个名为 category_ids
的 属性 产品对象,它是一个 ID 数组。
我已将 $update
方法添加到我的资源工厂,以便我可以发送 PUT 请求。
当我 PUT 时,服务器收到如下数据:
id: 1,
description: 'Yada yada',
category_ids: [1,2,3],
product: { id: 1, description: 'Yada yada' } //<-- I need category_ids in here
如何将 category_ids
数组放入那里的 product
节点?
更多详情:
我正在使用 angular 的资源来更新:
'use strict'
angular.module('myApp').factory 'Product', ($resource) ->
resource = $resource '/api/v1/products/:id', { id: '@id' },
update:
method: 'PUT'
return resource
有趣的是,这个问题只发生在调用我的对象的实例方法时。在工厂本身调用 class 方法有效:
currentProduct.$update()
<-- 这没有给我想要的格式!
Product.update(id: currentProduct.id, product: currentProduct)
<-- 这样做 :-\
我们需要 $update
方法的代码,但我怀疑它依赖于 this
关键字,这取决于您调用函数的对象 来自.
能否请您试试这个,如果有效请告诉我们:
currentProduct.$update.bind(Product) ();
如果是,这意味着确实 $update
期望 this
为 Product
(事实并非如此,在您的示例中为 currentProduct
)。
您可以向 $resource 对象添加属性,例如
currentProduct.category_ids = [1,2,3];
现在这个属性成为PUT请求的请求参数。
假设您有 $resource 工厂名称“Product”,那么下面的代码对您有用
var currentProduct = new Product()
// Bind properties to resource object
currentProduct.id = 1
currentProduct.description = 'Yada yada'
currentProduct.category_ids = [1,2,3]
// Initiate PUT request.
currentProduct.$update()
我相信Rails 期望放置请求遵循模式
/product/:id
所以当你想更新产品时,你应该调用它
product.$update({id:product.id});
然后将向 url
发出请求
http://api/v1/products?id=1
请求负载如
{"id":"1","description":"Yada yada","category_ids":[1,2,3]}
请在此处查看演示
创建 angular 服务
// Angular Service
angular.module('myApp').factory('Product', function($resource,ENV)
return $resource(ENV.apiEndpoint+'/api/v1/products/:id', {}, {
update: { method: 'PUT' , params:{id:'@id'}}
});
});
在你的控制器中你必须设置产品对象
angular.module('myApp').controller('ProductController',
function ($scope,Product) {
var requestParams = {
id: 1, //Service extracts this parameter to form the url
product: {
id: 1,
description: 'Yada yada'
category_ids: [1,2,3]
}
}
Product.update(requestParams,function(success){
console.log(success)
},function(error){
console.log(error)});
});
我有一个名为 category_ids
的 属性 产品对象,它是一个 ID 数组。
我已将 $update
方法添加到我的资源工厂,以便我可以发送 PUT 请求。
当我 PUT 时,服务器收到如下数据:
id: 1,
description: 'Yada yada',
category_ids: [1,2,3],
product: { id: 1, description: 'Yada yada' } //<-- I need category_ids in here
如何将 category_ids
数组放入那里的 product
节点?
更多详情:
我正在使用 angular 的资源来更新:
'use strict'
angular.module('myApp').factory 'Product', ($resource) ->
resource = $resource '/api/v1/products/:id', { id: '@id' },
update:
method: 'PUT'
return resource
有趣的是,这个问题只发生在调用我的对象的实例方法时。在工厂本身调用 class 方法有效:
currentProduct.$update()
<-- 这没有给我想要的格式!
Product.update(id: currentProduct.id, product: currentProduct)
<-- 这样做 :-\
我们需要 $update
方法的代码,但我怀疑它依赖于 this
关键字,这取决于您调用函数的对象 来自.
能否请您试试这个,如果有效请告诉我们:
currentProduct.$update.bind(Product) ();
如果是,这意味着确实 $update
期望 this
为 Product
(事实并非如此,在您的示例中为 currentProduct
)。
您可以向 $resource 对象添加属性,例如
currentProduct.category_ids = [1,2,3];
现在这个属性成为PUT请求的请求参数。
假设您有 $resource 工厂名称“Product”,那么下面的代码对您有用
var currentProduct = new Product()
// Bind properties to resource object
currentProduct.id = 1
currentProduct.description = 'Yada yada'
currentProduct.category_ids = [1,2,3]
// Initiate PUT request.
currentProduct.$update()
我相信Rails 期望放置请求遵循模式
/product/:id
所以当你想更新产品时,你应该调用它
product.$update({id:product.id});
然后将向 url
发出请求http://api/v1/products?id=1
请求负载如
{"id":"1","description":"Yada yada","category_ids":[1,2,3]}
请在此处查看演示
创建 angular 服务
// Angular Service
angular.module('myApp').factory('Product', function($resource,ENV)
return $resource(ENV.apiEndpoint+'/api/v1/products/:id', {}, {
update: { method: 'PUT' , params:{id:'@id'}}
});
});
在你的控制器中你必须设置产品对象
angular.module('myApp').controller('ProductController',
function ($scope,Product) {
var requestParams = {
id: 1, //Service extracts this parameter to form the url
product: {
id: 1,
description: 'Yada yada'
category_ids: [1,2,3]
}
}
Product.update(requestParams,function(success){
console.log(success)
},function(error){
console.log(error)});
});