簡體   English   中英

如何使$ resource接受字符串數組(AngularJS)

[英]How to make $resource accept array of strings (AngularJS)

我想向REST服務發出請求,其中查詢參數包含字符串數組:

productRestService.getProductsInfo(productIdsArray,"id,name,rating").$promise.
               then(function(productData) { // success: Produktdaten auslesen                
                    updateProductList(productData);

                }, function (error) {
                    console.log("Status: " + error.status);       
                });

資源服務如下:

productRestService.getProductsInfo = function(productIds, properties) {
        console.log('productRestService.getProductsInfo(): productIds' + productIds);
        var productInfoResourceData;
        var ProductInfoResource = $resource('/rest/products/productsInfo/:productIds/:properties',
            {
                productIds:'@productIds',
                properties:'@properties'
            }
        );
        productInfoResourceData = ProductInfoResource.query(
            {
                productIds: productIds,
                properties: properties
            }
        );
        return productInfoResourceData;

    }

調用服務會導致404錯誤,因為$ resource對象的默認行為是當使用“查詢”時,它期望對象數組。

如何實現我的$ resoure-service將接受字符串數組? 我嘗試使用“ transformRequest”(請參見下面的代碼段),但這也不起作用。

  {
                query: {
                  method: 'GET',
                  isArray: true,
                  transformResponse: function (data, headers) {
                    var tranformed = [];
                    [].forEach.call(eval(data), function (d) {
                        tranformed.push({ name: d });
                    });
                    return tranformed;
                    }
                }
            }

REST服務productService.getProductsInfo函數中的console.log顯示該服務接收的正確數據:

["212999cc-063b-4ae8-99b5-61a0af39040d","17e42a28-b945-4d5f-bab1-719b3a897fd0","9307df3e-6e7a-4bed-9fec-a9d925ea7dc0"]

該URL與其他REST-URLS正確,並且應采用這種方式(並相應地連接到該域):

'/rest/products/productsInfo/:productIds/:properties'

編輯:productService中的其他函數按順序響應,它們不使用數組而是JSON對象,並且不顯示意外行為。

(這最初是評論,但它需要格式干凈的代碼示例。)

我懷疑您的:productIds模板參數已作為"[object Object]"填充到模板中。 我只看到了您的模板URL,沒有看到實際的構造URL,所以我不確定。

如果您的服務器期望使用:productsIds模板參數為JSON的URL,例如---

rest/products/productsInfo/["id1","id2","id3"]/{"prop1":true,"prop2":false}

---然后嘗試將getProductsInfo定義編輯為如下形式:

productRestService.getProductsInfo = function (productIds, properties) {
    var ProductsInfo = $resource('/rest/products/productsInfo/:productIds/:properties', {
        productIds: function () {
            return angular.toJson(productIds);
        },
        properties: function () {
            return angular.toJson(properties);
        }
    });
    return ProductsInfo.query();
}

(警告,我沒有測試此代碼。這只是您的示例的快速編輯。)

這樣,您可以確保參數值將轉換為服務器期望的JSON(也就是說,如果服務器期望URL中的JSON)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM