AngularJS:如何加载一次远程公共数据并在控制器之间共享?



在我的angularjs应用程序中,我只想加载一次庞大的数据列表,并在控制器之间共享。 所以我有一个通过http检索数据的工厂:

angular.module('app').factory('reportFactory', ['$http', function ($http) {
var reportFactory = {};
reportFactory.endPoint = 'ajax.php';
reportFactory.getHugeData = function () {
return $http.get(this.endPoint + '?query=CourseListQuery');
};
return reportFactory;
}]);

我试过这个:

angular.module('app').factory('CommonData', ['reportFactory', function CommonDataFactory(reportFactory) {
var data = {};
reportFactory.getHugeData().then(function (response) {
data.courses = response.data;
}, function (error) {
});
return data;
}]);

但是当我在控制器中尝试访问log.warn(CommonData.courses);时,我得到了undefined

我想存储该承诺的结果,以使其可用于我的所有angularjs应用程序。

如何构建它以及在哪里进行将检索数据的唯一调用?

使用提供程序。

angular.provider("CommonData", [function() {
this.commonData = {};
this.setCommonData = function(commonData) {
this.commonData = commonData;
};
this.getCommonData = function() {
return this.commonData;
};
}]);

然后在控制器中:

angular.controller("ExampleController", ['CommonDataProvider', function(CommonDataProvider) {
var commonData = CommonDataProvider.getCommonData();
}]);

最新更新