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

时间:2017-08-17 10:05:02

标签: javascript angularjs angularjs-scope

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

检索数据
 routes.MapRoute(
        name: "Edit",
        url: "Edit",
        defaults: new { controller = "Home", action = "Edit" }
    );

我试过了:

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);

我想存储该承诺的结果,以便将其提供给我的所有angularjs应用。

如何构建那个以及在何处进行将检索数据的唯一调用?

1 个答案:

答案 0 :(得分:0)

使用提供商。

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();
}]);