Restangular嵌套的REST资源厂内

Restangular嵌套的REST资源厂内

问题描述:

我的服务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; 
     }); 
};