javaScript中的异步数据检索
我在那里 在Restangular和Angular本地存储的帮助下,我正在构建Angular.js应用程序。我需要从RESTFull服务服务器检索一些数据,并将其分配给$scope变量 我想知道,在将数据加载到我的视图(html)之前,如何等待所有数据加载 以下是我迄今为止所做的工作:javaScript中的异步数据检索,javascript,angularjs,asynchronous,restangular,angular-local-storage,Javascript,Angularjs,Asynchronous,Restangular,Angular Local Storage,我在那里 在Restangular和Angular本地存储的帮助下,我正在构建Angular.js应用程序。我需要从RESTFull服务服务器检索一些数据,并将其分配给$scope变量 我想知道,在将数据加载到我的视图(html)之前,如何等待所有数据加载 以下是我迄今为止所做的工作: app.controller('InventoryController', function($scope, inventoryService) { $scop
app.controller('InventoryController', function($scope, inventoryService) {
$scope.productList = inventoryService.getProduces();
console.log($scope.productList); // At that point, $scope.productList is null
});
app.service('inventoryService', function(entityService, browserStorageService) {
entityService.allUrl('product', entityService.getBaseUrl).getList().then(function(data){
console.log(data); // The data variable is not null here.
browserStorageService.set('producList', data);
});
this.getProduces = function() {
return browserStorageService.get('producList');
};
});
app.service('browserStorageService', function(localStorageService) {
localStorageService.clearAll();
return localStorageService;
});
app.service('entityService', function(Restangular) {
Restangular.setBaseUrl('http://localhost:8000/rest/');
return Restangular;
});
我对JavaScript的异步特性一点也不满意,我确信它非常简单,但我不知道我能做些什么来纠正这种情况
数据不会在第一次调用控制器时加载到页面中,但是当我再次调用它而不重新加载应用程序时,数据就在那里
谢谢你的帮助 而不是调用
inventoryService.getProducts()代码>在控制器中,您必须使用来自服务的数据在应用程序的配置部分中创建resolve对象。之后,您可以访问传递给控制器的数据
app.config(function($routeProvider){
$routeProvider
.when('/',{
template:'',
controller: 'InventoryController',
resolve:{
products: function(inventoryService) {
return inventoryService.getProduces();
}
}
});
});
app.controller('InventoryController', function($scope, products) {
$scope.productList = products;
console.log($scope.productList);
});
模板和路径应该根据您的应用程序结构进行设置。您看到这个问题了吗?看起来很相似谢谢,我开始喜欢AngularJs了,所以聪明的呵呵,您让我走上了正确的方向,但现在的问题是,InventoryService在何处调用browserStorageService以获取方法getProduct()中的ProduceList;调用是异步的,所以它返回一个未分配的变量给,同样的问题,但在流程的后面一点!我认为您的响应很好,因为这是正确的方法,如果我不使用browserStorageService并直接从entityService返回值,它会正常工作。要在缓存中获取请求的对象,我会切换到angular cached resource,它能很好地工作,因为我的应用程序不会始终访问服务器(冷冻柜中的库存:)。