我试图从GitHub仓库中获取国家列表,但没有将所有信息存储在JS或我自己的API中,因此我编写了一次性服务来照顾这对我来说,并缓存在浏览器中的结果,以防他们再次需要。然而,我注意到我写的方式,$http.get
被称为负载而不是服务注入到控制器 - 这意味着即使不需要浏览器请求所有国家的数据(例如,即使当用户访问国家页面时AngularJS服务延迟API调用
由于服务只是返回一个承诺,所以我可以在控制器中调用countrylist.then(...)
。有没有办法保持这一点,但仍然延迟直到它的实际需要Github的请求之下
代码:
angular.module('myModule')
.factory('countrylist', ['$http', 'growl', '$q', function ($http, growl, $q) {
var deferred = $q.defer();
var flagUrl = "https://raw.githubusercontent.com/hjnilsson/country-flags/master/png250px/{}.png";
$http.get('https://raw.githubusercontent.com/lukes/ISO-3166-Countries-with-Regional-Codes/master/slim-2/slim-2.json',
{cache: true})
.success(function (data) {
angular.forEach(data, function (item) {
item.flag = flagUrl.replace("{}", item['alpha-2'].toLowerCase());
});
deferred.resolve(data);
}).error(function (data) {
growl.warn("Error loading country data");
deferred.reject();
});
return deferred.promise;
}]);