Restangular Nested Rest Resources inside Factory
My services
app.factory('PartnerServiceRestangular', ['Restangular', function(Restangular) {
return Restangular.service('partner');
}]);
app.factory('PartnerInvoiceServiceRestangular', ['PartnerServiceRestangular', function(PartnerServiceRestangular) {
return PartnerServiceRestangular.one('partner', partnerId).service('invoice');
}]);
My controller
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({})
};
What I want to do is allow the PartnerInvoiceServiceRestangular
following get requests to run:
-
/partner/{partnerId}/invoice/
- return ALL invoices for a specific partner. -
/partner/{partnerId}/invoice/?startDate=2014-06-01&stopDate=2014-6-30
- Return of all invoices between two given dates -
/partner/{partnerId}/invoice/{invoiceId}
- To return a specific invoice
I already have a setup ng-model introduction, which set $ scopes partnerId
, startDate
,stopDate
source to share
Something like this should work.
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;
}
};
However, I'm not a fan of your factory service implementation. Why not just use:
$scope.partnerChange = function(partner) {
$scope.partner = partner;
partner.getList('invoice', { startDate: startDate, stopDate: stopDate }).then(function(invoices) {
$scope.partner.invoices = invoices;
});
};
source to share
Quick response.
Let's take a look at the "Decoupled Relay Service" section: https://github.com/mgonto/restangular#decoupled-restangular-service
We can also use Nested RESTful resources:
var Cars = Restangular.service('cars', Restangular.one('users', 1));
Cars.getList() // GET to /users/1/cars
In your case it would be like this:
var partner = PartnerServiceRestangular.one(1);
var invoices = Restangular.service('invoice', partner);
But not sure if your PartnerInvoiceServiceRestangular
factory is well designed.
Hope it helps.
source to share