2013-05-14 20 views
9

我有用於建立一個web服務控制器的陣列「活動」的數據角nsResource創建字符數組的用於REST字符串數組

GET /api/activity/list 
GET /api/activity/1 
GET /api/activity/activity-slug-name 
PUT /api/activity 
DELETE /api/activity/1 

它還充當了一些「元」數據

GET /api/activity/meta/dates 
GET /api/activity/meta/states 

它們都使用ngResource非常好,因爲它們都返回JSON對象。 然而,/ API /活動/元/日期不

它返回一個字符串數組

[ 
    "2013-06-02T17:05:16Z", 
    "2013-06-07T17:05:16Z", 
    "2013-08-17T17:05:16Z" 
] 

ngResource輪流到這個字符數組的數組 見:Invalid result from ngResource request with string array

很顯然,我可以只是將元功能分成某種形式的ActivityMetaService,但我寧願將它們全部放在一起

我的問題是

有沒有辦法阻止ngResource執行這種過熱的對象分解?

或者我應該rais錯誤與角?

在此先感謝

* UPDATE *

感謝馬克的評論。如果你已經把它作爲答案,我會接受它,因爲它指向了Angular中的一個錯誤,而另外兩個答案不符合當前的體系結構。

當你的技術是正確的,沒有人雖然字符串作爲80年代中期以來字符數組,C/C++程序員一邊:)

我提出一票在GitHub上與angular.js項目下面

https://github.com/angular/angular.js/issues/2664

+2

這是因爲使用angular.copy的'的()''的$資源中()'。當copy()函數找到一個字符串數組時,它會將該字符串視爲一個字符數組(它實際上是)。我不知道要禁用這種行爲,現在唯一真正的方法是直接使用'$ http'服務。 –

回答

2

我們的,你可以嘗試使用transformRequest

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

}