2012-04-02 24 views
10

Cách thông thường của việc xác định một nguồn tài nguyên bị cô lập trong AngularJS là:

angular.service('TheService', function($resource){ 
    return $resource('api/url'); 
}); 

Tôi đang cố gắng tìm ra cách tốt nhất để viết một mô hình có liên quan đến các mô hình khác, chẳng hạn như một Order có 1 hoặc nhiều hơn OrderItem s. Ý tưởng đầu tiên của tôi là thế này:

  1. Tạo các mô hình tài nguyên độc lập OrderServiceOrderItemService
  2. Viết một bộ điều khiển truy vấn OrderService và đồng hồ các mảng kết quả
  3. Khi kết quả thay đổi mảng, truy vấn OrderItemService cho tất cả của các ID mục và trang trí đối tượng order với thông tin mở rộng như được nêu trong

Điều đó có vẻ hơi lộn xộn. Có cách nào thanh lịch hơn không?

+0

nó tăng "LoạiError: angular.service không phải là chức năng" – zVictor

+0

IIRC, tôi đã hỏi khi Angular là trước 1.0. API có thể đã thay đổi kể từ đó. –

+0

Không vấn đề gì, tôi đã tạo câu hỏi được cập nhật: http://stackoverflow.com/q/11038425/599991 – zVictor

Trả lời

18
angular.service('OrderItem', function($resource) { 
    return $resource('api/url/orderItem'); 
}); 

angular.service('Order', function($resource, OrderItem) { 
    var Order = $resource('api/url/order'); 

    Order.prototype.items = function(callback) { 
    return order.query({orderId: this.id}, callback); 
    } 
    return Order 
}); 

Điều gì đó giống như trên có giải quyết được sự cố của bạn không? Sau đó, bạn sẽ sử dụng nó làm

var order, items; 

Order.get({id: 123}, function(o) { 
    order = o; 
    o.items(function(is) { items = is; }); 
}); 

Tài nguyên $ của góc không hiểu mối quan hệ. Đó là điều chúng tôi muốn thay đổi trong bài đăng 1.0.

Tôi không nghĩ rằng bạn nên đặt dữ liệu trên đơn hàng trực tiếp, vì nó không phải là một phần của nó, và bạn sẽ có vấn đề tồn tại thứ tự vì nó bây giờ sẽ có các đối tượng mục là tốt.

+0

Chúng tôi đang làm một loại CQRS, vì vậy dữ liệu Đơn đặt hàng chỉ đọc. Cảm ơn! –

+4

Tôi nghĩ rằng các mục chức năng nên sử dụng 'OrderItem' thay vì' order'. – psyho

+1

Có vẻ như đã lỗi thời. Làm thế nào chúng ta có thể sử dụng nó với các nhà máy? – zVictor