2014-12-02 111 views
3

我的服務Restangular嵌套的REST資源廠內

app.factory('PartnerServiceRestangular', ['Restangular', function(Restangular) { 

    return Restangular.service('partner'); 

}]); 

app.factory('PartnerInvoiceServiceRestangular', ['PartnerServiceRestangular', function(PartnerServiceRestangular) { 

    return PartnerServiceRestangular.one('partner', partnerId).service('invoice'); 

}]); 

我的控制器

app.controller('FinancialsController', [ 
    '$scope', 
    'PartnerServiceRestangular', 
    'PartnerInvoiceServiceRestangular', 
    function($scope, PartnerServiceRestangular, PartnerInvoiceServiceRestangular) { 

    PartnerServiceRestangular.getList().then(function(partners) { 
     $scope.partners = partners; 
    }); 

    $scope.partnerChange = function(partner) { 
     $scope.partner = partner; 
    }; 

    var getInvoices = function(partnerId, startDate, stopDate) { 

     // STUCK HERE 
     PartnerInvoiceServiceRestangular.get({})  
    }; 

我所希望做的是,讓PartnerInvoiceServiceRestangular執行以下GET請求:

  • /partner/{partnerId}/invoice/ - 返回特定合作伙伴的所有發票Id
  • /partner/{partnerId}/invoice/?startDate=2014-06-01&stopDate=2014-6-30 - 返回所有發票2個指定的日期
  • 之間
  • /partner/{partnerId}/invoice/{invoiceId} - 要返回一個特定發票

我已經在裏面設置的partnerId在$範圍,startDate視圖的NG-模式設置,stopDate

回答

0

快速回答。

讓我們來看看「脫鉤Restangular服務」部分:https://github.com/mgonto/restangular#decoupled-restangular-service

我們還可以使用嵌套的RESTful資源與此:

var Cars = Restangular.service('cars', Restangular.one('users', 1)); 

Cars.getList() // GET to /users/1/cars 

在你的情況下,它會是這樣的:

var partner = PartnerServiceRestangular.one(1); 
var invoices = Restangular.service('invoice', partner); 

但不知道你的PartnerInvoiceServiceRestangular工廠設計好。

希望這會有所幫助。

2

像這樣的東西應該工作。

app.factory('PartnerInvoiceServiceRestangular', ['PartnerServiceRestangular', function(PartnerServiceRestangular) { 

    return { 
     getService: function(partnerId) { 
      PartnerServiceRestangular.one('partner', partnerId).service('invoice'); 
     } 
    } 

}]); 


var getInvoices = function(partnerId, startDate, stopDate) { 
    PartnerInvoiceServiceRestangular.getService(partnerId) 
     .getList({ startDate: startDate, stopDate: stopDate }).then(function(invoices) { 
      $scope.partner.invoices = invoices; 
     } 
}; 

但是,我不是你的工廠服務實施的粉絲。爲什麼不使用:

$scope.partnerChange = function(partner) { 
    $scope.partner = partner; 
    partner.getList('invoice', { startDate: startDate, stopDate: stopDate }).then(function(invoices) { 
      $scope.partner.invoices = invoices; 
     }); 
};