2016-04-05 30 views
0

我是AngularJS的新手。如果我的問題很愚蠢,我真的很抱歉,但我無法在兩天內找到決定。所以,我有一個服務,它必須在初始化期間通過$http自己加載數據並存儲它。我發現了一些關於promises的信息,但每次訪問它時都會加載數據。但我希望這個數據加載一次,可以更改和保存。爲了更好地理解我這是怎麼想AJAX加載JSON數據並存儲在angularjs服務

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()方法? 另外,如果不是太困難,你能否更詳細地解釋,我的主要錯誤在哪裏。

回答

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 
 
    }

這樣,你的數據只被加載一次。

+0

當然,您可以使用Promises而不是回調 –

+0

非常感謝!有用。 –

相關問題