我有这个应用程序,我正在为此创建一个检索给定月份数据的服务。在这个MeasurementController
中,我必须加载两个月的数据,当前和之前。我在将数据加载到两个单独的变量时遇到了一些问题。
monthlyReportApp.controller('MeasurementController',['$scope', 'phoneReportService', function ($scope, phoneReportService) {
var currentMonth = 9;
var prevMonth = 8;
var phoneReport = {};
$scope.currentMonth = {};
$scope.prevMonth = {};
$scope.currentMonth = monthlyReport(prevMonth);
function applyPhoneReport(report) {
//phoneReport = {};
phoneReport = report[0];
}
console.log($scope.currentMonth);
console.log($scope.prevMonth);
function monthlyReport(month) {
loadPhoneReport(month);
console.log(phoneReport);
return phoneReport;
}
function loadPhoneReport(month) {
phoneReportService.getReport(month)
.then(function (report) {
applyPhoneReport(report);
});
}
}]);
如您所见,loadPhoneReport
从服务中调用getReport
方法。 applyPhoneReport
方法将数据复制到数组。现在,如果只有一个$ scope对象,那么我可以将applyPhoneReport
方法直接复制到它上面,但是因为我有两个不同的"月"我需要的数据,我无法弄清楚如何复制它而不重复相同的功能来做同样的事情。实现这一目标的最佳方法是什么?
答案 0 :(得分:0)
这是您的控制器在controllerAs语法中重构,只调用一次服务器。
您可以在此处阅读角度最佳实践(在控制器顶部声明控制器变量,使用控制器等):
https://github.com/johnpapa/angular-styleguide
(function(){
"use strict";
angular
.module('app')
.controller('MeasurementController', MeasurementController);
MeasurementController.$inject = ['$scope', 'phoneReportService'];
/* @ngInject */
function MeasurementController ($scope, phoneReportService) {
/* jshint validthis: true */
var vm = this;
vm.currentMonth = {};
vm.prevMonth = {};
var currentMonth = 9;
var prevMonth = 8;
var phoneReport = {};
activate();
////////////////
function activate() {
loadPhoneReport(prevMonth, vm.prevMonth);
loadPhoneReport(currentMonth , vm.currentMonth );
}
function loadPhoneReport(month, reportRef) {
return phoneReportService.getReport(month)
.then(function(report){
if (reportRef )
reportRef = report[0];
return report[0];
});
}
}
})();