2012-04-02 5 views
10
는 AngularJS와에 고립 된 리소스를 정의의 일반적인 방법은

:

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

내가 같은 다른 모델에 관한 모델을 작성하는 최선의 방법을 알아 내려고 노력하고있어 Order에는 OrderItem이 1 개 이상 있습니다.

  1. OrderService를 조회하고 그 결과 배열 변경, 모든에 대한 OrderItemService를 조회하면 결과 배열
  2. 시계 컨트롤러를 적는다 OrderServiceOrderItemService 독립적 인 자원 모델을 만들기 : 내 첫번째 생각은 이것이다 아이템 ID 중 order 오브젝트를 확장 정보로 장식하십시오.

다소 지저분 해 보입니다. 더 우아한 방법이 있습니까?

+0

"TypeError : angular.service가 함수가 아닙니다." – zVictor

+0

IIRC, Angular가 1.0 이전 일 때 질문했습니다. 그 이후 API가 변경되었을 가능성이 있습니다. –

+0

문제가 없지만 업데이트 된 질문을 만들었습니다. http://stackoverflow.com/q/11038425/599991 – zVictor

답변

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 
}); 

위와 비슷한 것이 문제를 해결합니까? 다음과 같이 사용하십시오

var order, items; 

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

Angular 's $ 리소스는 관계를 이해하지 못합니다. 그것은 1.0 이후에 우리가 바꾸고 싶은 것입니다.

데이터의 일부가 아니기 때문에 데이터를 직접 주문해야한다고 생각하지 않습니다. 항목 개체도 포함되어 있으므로 주문을 유지하는 데 문제가 있습니다.

+0

우리는 일종의 CQRS를 수행하고 있으므로 주문 데이터는 읽기 전용입니다. 감사! –

+4

items 함수는'order' 대신'OrderItem'을 사용해야한다고 생각합니다. – psyho

+1

그것은 쓸모없는 것 같습니다. 어떻게 공장에서 사용할 수 있습니까? – zVictor