2015-03-08 66 views
-2

我有一個名爲category_ids的屬性的產品對象,它是一個ID數組。如何使用角度資源發送包含數組的對象?

我已將$update方法添加到我的資源工廠,以便我可以發送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() < - 這不給我我想要的格式!

Product.update(id: currentProduct.id, product: currentProduct) < - 這確實: - \

+1

你能告訴你如何現在發佈的數據到服務器? – lwalden 2015-03-08 18:58:36

+0

當然,只是增加了一些細節 – Nathan 2015-03-08 19:02:42

+0

真的不清楚你在問什麼,它似乎更像是一個服務器端問題而不是一個角度 – charlietfl 2015-03-08 22:39:03

回答

1

您可以像

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

我們需要的是$update方法的代碼,但我懷疑它是依靠this關鍵詞,這取決於哪個對象調用的函數上是不同的from

可否請你試試這個,讓我們知道,如果它的工作原理:

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

如果確實如此,這意味着確實$update期待thisProduct(這是不是這樣的,是currentProduct在你的榜樣代替)。

+0

我只是更新代碼示例以向您展示資源工廠中的內容。沒有其他的代碼。我只是使用裸骨角的1.3資源對象,除了添加裸機自定義更新方法外。可以在類中調用此方法,如下所示:'Product.current(id:instance.id,product:instance)'或類似如此的實例:'instance。$ current()'。我的問題是發送到服務器的數據在兩種情況下都不同,即使我正在處理同一個實例。 – Nathan 2015-03-11 22:37:06

+0

你可以試試我的代碼片段,並告訴它是否有效?另外,你如何創建'currentProduct'?它如何訪問'$ update'? – floribon 2015-03-11 22:41:18

+0

它使用您的代碼段進行GET調用? – Nathan 2015-03-11 22:51:16

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

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)});  
}); 
相關問題