我有两个视图使用的一个控制器 CounterpartyCtrl 。
第一个视图包含一个选择器,它需要收集所有记录。所以我获取所有对象并将它们放入 $ scope.counterparties 。
app.controller('CounterpartyCtrl', [
'$scope', 'Counterparty', function($scope, Counterparty) {},
$scope.counterparties = {},
$scope.loadCounterparties = function() {
Counterparty.query(function(response) {});
$scope.counterparties = response;
},
$scope.loadCounterparties();
]);
第二个视图必须仅包含按组划分的交易对手。
$scope.customers
$scope.vendors
$scope.others
$scope.HRs
因此,使用相同的控制器,我会像下面的
一样获取它们 app.controller('CounterpartyCtrl', [
'$scope', 'Counterparty', function($scope, Counterparty) {},
$scope.counterparties = {},
$scope.loadCounterparties = function() {
Counterparty.query(function(response) {});
$scope.counterparties = response;
$scope.customers = Counterparty.query({
group: 'Customer'
});
$scope.vendors = Counterparty.query({
group: 'Vendor'
});
$scope.others = Counterparty.query({
group: 'Other'
});
$scope.HRs = Counterparty.query({
group: 'HR'
});
},
$scope.loadCounterparties();
]);
正如您在此处看到的那样,明显重复请求。在每一个观点上,我都提出了相同的要求,因此这不是很有成效我该如何重构代码?
答案 0 :(得分:1)
您可以更改后端以返回此类内容
{
'Customers': customers,
'Vendors': vendors,
'Other': others,
'HR': hrs
}
然后使用它来制作一个完整的数组,或者只是根据你调用时获取所需的部分。只有在所有用户都可以访问所有数据的情况下才能执行此操作,如果他们查看网络选项卡中的响应数据,则可以。它还会为您的前端提供更多的工作,以便客户端进行处理。
希望这有助于你所寻找的东西。
答案 1 :(得分:1)
这就是我在使用$ q和缓存服务中的结果以避免多个请求时的意思:http://plnkr.co/edit/3AeOjHaVo8MrY18tStEs
app.factory("dataService", ["$http","$q", function($http, $q){
var counterParties;
return {
query: function(param){
if(!counterParties){
counterParties = $q.defer();
$http.get("requestURL").then(function(response){
counterParties.resolve(response.data);
});
}
return counterParties.promise;
}
};
}]);