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