2013-05-14 16 views
9

Mam kontroler serwis internetowy, który serwuje „aktywność” Danekątowa nsResource tworzy tablicę tablic char na odpoczynek tablic łańcuchowych

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

Służy on także jakieś dane „meta”

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

Wszystkie działają bardzo dobrze przy użyciu ngResource, ponieważ wszystkie zwracają obiekty JSON. Jednakże/api/działalności/meta/daty nie

Zwraca tablicę ciągów

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

ngResource zamienia to na tablicę tablic char patrz: Invalid result from ngResource request with string array

Oczywiście mogę po prostu podzieliłem funkcje meta na jakąś formę ActivityMetaService, ale wolałbym zachować to wszystko razem.

Moje pytanie to

Czy istnieje sposób, aby zatrzymać ngResource przed wykonaniem tej nadgorliwej dekompozycji obiektu?

Czy powinienem zrobić błąd z kątem?

góry dzięki

* AKTUALIZACJA *

Dzięki Mark za komentarz. Jeśli umieściłbyś to jako odpowiedź, zaakceptowałbym to, ponieważ wskazuje na błąd w Angular, a pozostałe dwie odpowiedzi nie pasują do obecnej architektury.

Gdy jesteś techniczny poprawne, choć nikt ciągów jako tablica znaków od połowy lat 80-tych, C/C++ na bok :)

mam podniesione bilet na github z projektem angularjs odniesienie poniżej

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

+2

Dzieje się tak z powodu użycia 'angular.copy()' '$ wewnątrz zasobu()'. Gdy funkcja 'copy()' znajdzie tablicę łańcuchów, traktuje ciąg jako tablicę znaków (którą faktycznie jest). Nie ma sposobu, żebym wiedział, aby wyłączyć to zachowanie, jedyną prawdziwą drogą jest teraz użycie usługi '$ http' bezpośrednio. –

Odpowiedz

2

Nasza można spróbować użyć transformRequest

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

}