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
答
快速回答。
让我们来看看“脱钩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
工厂设计好。
希望这会有所帮助。
答
像这样的东西应该工作。
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;
});
};