如何在AngularJS中构建服务以使数据可用

时间:2017-04-19 09:25:50

标签: javascript angularjs angular-services

研究和测试一点AngularJS,我对如何构建服务以使某些控制器可用的数据产生疑问。

我有一个JSON文件,我想从我的服务加载它,然后通过我的控制器使用此服务来访问数据。

现在我的服务看起来像这样:

dashboardController.factory ('peopleRepository', function($http) {
return {
    getAllPeople: function() {
        return $http.get("people.json");
    }
}
});

简单明了。 然后在我的控制器中,我做了类似的事情:

dashboardController.controller ('genderCtrl', function ($scope, $rootScope, peopleRepository) {
  $scope.males = 0;
  $scope.females = 0;

  $scope.people = peopleRepository.getAllPeople().success(function(users) {
    console.log ("SUCCESS -< ", users);
  });

});

......当然,一切都很好并且有效。 但我很确定这不是正确的做法。我需要在几个控制器中访问这些数据,这意味着基本上文件将被反复加载,每次我等待成功事件加载内容。不是很优雅。 对新手有什么建议/提示吗?

2 个答案:

答案 0 :(得分:3)

创建一个cache对象以将数据存储在服务中。第一个控制器将获取的数据保存到它。另一个要求数据的人不会再次调用$ http,而是从缓存对象中获取它。

我想你也必须使用例如$ q创建promise base函数来获取数据。

此外,您可以在$ http angularjs服务中使用内置缓存。有关详细信息,请参阅How to cache an http get service in angularjs

答案 1 :(得分:2)

您必须至少添加一个简单的缓存机制。

这是一个简单的例子:

dashboardController.factory ('peopleRepository', function($http, $q) {
    var people;

    return {
        getAllPeople: function() {
            if (!people) {
                // endpoint value may be put in a constant
                people = $http.get("people.json").then(function (result) {
                    return result;
                });
                // A generic error handling mechanism can also be used
            }
            return people;
        }
    }
});