(function () {
angular.module("app").controller('DashboardController', ['$q', 'dashboardService', function ($scope, $q,dashboardService) {
var DashboardController = this;
dashboardService.loadFromServer(DashboardController );
console.log("DashboardController ", DashboardController);
}])
})();
angular.module("app").service('dashboardService', ['$http', '$q', function ($http, $q) {
return {
loadFromServer: function (controller) {
var getDashboardEntries = $http.get('http://someUrl');
var getEmailData = $http.get('http://someOtherUrl');
var getSidebarData = $http.get('http://yetAnotherUrl');
return $q.all([getDashboardEntries, getSidebarData, getEmailData])
.then(function (results) {
controller.dashboardData = results[0].data;
controller.chartData = results[1].data;
controller.emailData = results[2].data;
});
},
};
}]);
1.该服务返回三位数据,这是使用以下方式记录的结果:
console.log("DashboardController ", DashboardController);
当我尝试以这种方式深入研究数据时,它会记录" undefined"
console.log(" DashboardController" DashboardController.dashboardData); console.log(" DashboardController" DashboardController.chartData); console.log(" DashboardController" DashboardController.emailData);
答案 0 :(得分:1)
您是否意识到在服务器有机会响应并承诺解析之前调用console.log
后立即执行loadFromServer
?实际订单是:
loadFromServer
console.log
将您的控制器代码更改为:
dashboardService.loadFromServer(DashboardController ).then(function() {
console.log("DashboardController ", DashboardController);
});
更好的是从响应的部分构造一些对象并将其分配给控制器本身 - 而不是服务。在当前实现中,如果您想要另一个控制器,那么服务会将响应部分分配给相同的字段。我建议像这样:
return $q.all([getDashboardEntries, getSidebarData, getEmailData])
.then(function (results) {
var data = {
dashboardData = results[0].data;
chartData = results[1].data;
emailData = results[2].data;
};
return data;
});
然后在控制器中:
dashboardService.loadFromServer().then(function(data) {
DashboardController.dashboardData = data.dashboardData;
DashboardController.chartData = data.chartData;
DashboardController.emailData = data.emailData;
});
在此解决方案中,控制器决定如何处理数据,而不是相反。