AJAX加载JSON数据并将其存储在angularjs服务

时间:2016-04-05 08:17:08

标签: javascript angularjs json ajax

我是AngularJS的新手。如果我的问题很愚蠢,我真的很抱歉,但我找不到两天的决定。所以,我有一个服务,它必须在初始化期间通过$http将数据加载到自身并存储它。我找到了一些关于promises的信息,但每次访问时都会加载数据。但我希望这个数据加载一次,可以更改和保存。为了更好地理解这是我想要的方式

app.run(function ($http, MeasurUnitsService) {
        $http.get('jsonData/tabs.json').success(function (data) {
            MeasurUnitsService.tabs = data;
        });

        $http.get('jsonData/measurmentUnits.json').success(function(data){
            MeasurUnitsService.measurmentUnits = data;                      
        });
    });


angular.module("emis-calc").service('MeasurUnitsService', function($http){  
     var tabs = {};
    var measurmentUnits = {};   
    var ConvertTo = function(){
        // some logic with accessing to measurmentUnits 
        // measurmentUnits is empty
        return result;
    }
    return {
        convertTo : ConvertTo,
        tabs : tabs,
        measurmentUnits : measurmentUnits
    }       
})

但据我了解,因为$http.get()是异步和闭包,MeasurUnitsService.tabsMeasurUnitsService.measurmentUnits始终是{}在控制器和其他服务上。我觉得它很容易实现,但根本找不到它。也许有任何lock()方法? 另外,如果不是太难,你能解释得更详细吗?我的主要错误在哪里。

1 个答案:

答案 0 :(得分:2)

您应该在服务中提取您的http请求,并在您的控制器中使用该服务。

angular.module("emis-calc").service('MeasurUnitsService', function($http){  
   var tabs = null; 
  
   function getTabs(cb) {
     if(tabs) {
       cb(tabs) 
     } else {
       $http.get('jsonData/tabs.json').success(function (data) {
         tabs = data;
         cb(tabs);
       });
     }
   }
  
    return {
      getTabs
    }

这样,您的数据只会加载一次。