2013-05-14 40 views
9

Tôi có một bộ điều khiển dịch vụ web phục vụ lên "hoạt động" dữ liệugóc nsResource tạo ra một mảng của mảng char cho mảng chuỗi REST của

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

Nó cũng phục vụ một số "meta" dữ liệu

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

Tất cả chúng đều hoạt động rất tốt khi sử dụng ngResource vì tất cả chúng đều trả về các đối tượng JSON. Tuy nhiên,/api/hoạt động/meta/ngày không

Nó trả về một mảng các chuỗi

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

ngResource biến này vào một mảng của mảng char see: Invalid result from ngResource request with string array

Rõ ràng tôi có thể chỉ cần tách các hàm meta ra thành một dạng ActivityMetaService nhưng tôi muốn giữ tất cả lại với nhau

Câu hỏi của tôi là

Có cách nào để ngăn ngResource thực hiện quá trình phân tách đối tượng quá mức này không?

Hoặc tôi có nên tạo ra lỗi với góc cạnh không?

Cảm ơn trước

* CẬP NHẬT *

Nhờ Đánh dấu cho bình luận của bạn. Nếu bạn đã đặt nó như là một câu trả lời tôi sẽ chấp nhận nó, bởi vì nó trỏ đến một lỗi trong Angular và hai câu trả lời khác không phù hợp với kiến ​​trúc hiện tại.

Trong khi bạn đang kỹ thuật đúng, không ai dù của Strings như một loạt các ký tự kể từ giữa thập niên 80, C/C++ lập trình viên sang một bên :)

tôi đã nêu ra một vé trên github với dự án angular.js , tài liệu tham khảo dưới đây

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

+2

Điều này xảy ra do việc sử dụng của 'angular.copy()' bên trong '$ tài nguyên()'. Khi hàm 'copy()' tìm thấy một chuỗi các chuỗi, nó xử lý chuỗi như là một mảng các ký tự (mà nó thực sự là). Không có cách nào mà tôi biết để vô hiệu hóa hành vi này cách duy nhất thực sự hiện nay là sử dụng dịch vụ '$ http' trực tiếp. –

Trả lời

2

của chúng tôi bạn có thể thử sử dụng transformRequest

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

}

1

Để có được chỉ là một mảng của chuỗi sử dụng $http service để thay thế.

Các vấn đề liên quan