如何使用角度资源发送带有数组的对象?

时间:2015-03-08 18:53:18

标签: angularjs 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节点?


更详细信息:

我只是使用角色资源进行更新:

'use strict'

angular.module('myApp').factory 'Product', ($resource) ->

  resource = $resource '/api/v1/products/:id', { id: '@id' },
    update:
      method: 'PUT'

  return resource

有趣的是,这个问题只发生在我的对象上调用实例方法。在工厂本身调用类方法有效:

currentProduct.$update()&lt; - 这不能给我我想要的格式!

Product.update(id: currentProduct.id, product: currentProduct)&lt; - 这样做: - \

4 个答案:

答案 0 :(得分:1)

您可以向$ resource对象添加属性,例如

currentProduct.category_ids = [1,2,3];

现在这个属性成为PUT请求的请求参数。

假设您有$资源工厂名称“产品”,那么以下代码将适合您

  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()

答案 1 :(得分:1)

我相信Rails期望让请求遵循模式

  

/产品/:ID

因此,当您想要更新产品时,您应该将其称为

  product.$update({id:product.id});

这将向url发出请求

http://api/v1/products?id=1

请求有效负载,如

{"id":"1","description":"Yada yada","category_ids":[1,2,3]}

请在此处查看演示

http://plnkr.co/edit/Utjoj6LirxvzMGSwoffo?p=preview

答案 2 :(得分:0)

我们需要该$update方法的代码,但我怀疑它依赖于this关键字,这取决于您从调用函数的对象

请你试试这件事,让我们知道它是否有效:

currentProduct.$update.bind(Product) ();

如果确实如此,这意味着确实$update期望thisProduct(事实并非如此,而在您的示例中为currentProduct)。

答案 3 :(得分:0)

创建角度服务

// 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)});       
});