在我的控制器中,我有这段代码:
$scope.property = localStorageService.get('property');
澄清一下,localStorageService是一个角度模块,它有助于处理设置和获取本地存储变量。
问题是localStorageService.get('property')
由于工厂类处理异步$http调用,仅在一段时间后才会设置。在我做作业的时候,localStorageService.get('property')是未定义的,但最终将由xhr调用解决。
App.factory('fact', ['$http', 'localStorageService', function($http, localStorageService){
return {
fetchProperty: function() {
$http.get('/property')
.success(function(data, status, headers, config){
localStorageService.set('property', data);
})
}
}
}]);
如何设置$scope.property
何时且仅当已设置localStorageService.get('property')
时?
编辑
我正在使用浏览器的本地存储,因为检索到的属性旨在在整个应用程序中持续存在,直到用户注销,在这种情况下,它会从浏览器中删除。
如注释中的建议,返回承诺。您甚至可以像这样链接then
调用
return $http.get('/property').then(function(data) {
localStorageService.set('property', data);
return data;
});
然后,在您的控制器中...
fact.fetchProperty().then(function(property) {
$scope.property = property;
});
您是否尝试过使用本地存储服务的绑定功能。
类似的东西
App.factory('fact', ['$scope', '$http', 'localStorageService', function($scope, $http, localStorageService){
return {
fetchProperty: function() {
$http.get('/property')
.success(function(data, status, headers, config){
localStorageService.set('property', data);
localStorageService.bind($scope, 'property');
})
}
}
}]);
然后,无需在控制器中设置值。