我是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.tabs
和MeasurUnitsService.measurmentUnits
始终是{}
在控制器和其他服务上。我觉得它很容易实现,但根本找不到它。也许有任何lock()
方法?
另外,如果不是太难,你能解释得更详细吗?我的主要错误在哪里。
答案 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
}
这样,您的数据只会加载一次。