AngularJS服务,从$html.get返回预加载的数据或数据
AngularJS service which returns pre loaded data or data from a $html.get
我希望能够从角度服务返回预加载的数据,如果它已经存在,如果不是,我想从 Web 服务获取数据。
显然,其中一个操作是同步的,另一个不是,所以我想以异步方式包装简单的返回,这样我就不必有很多 if...否则在我的控制器中阻塞。
我尝试使用延迟 api,如下所示。
worksOrdersApp.factory("WorksOrderService", function ($http, $q) {
var _jobs = [];
var newWorksOrders = function () {
var deferredJobs = $q.defer();
if (_jobs.length === 0) {
return $http.get('/api/WorksOrders/GetNew').success(function(data) {
deferredJobs.resolve(data);
});
} else {
deferredJobs.resolve(_jobs);
}
return deferredJobs.promise;
};
return {
getNewWorksOrders: newWorksOrders,
};
});
那么在我的控制器中,它应该是一个简单的调用案例......
WorksOrderService.getNewWorksOrders().then(function (data) {
$scope.values = data;
});
这最初似乎有效,服务中data
的值是我所期望的数组。但是,当我在调用 deferredJobs.resolve()
后检查控制器中 data
的值时,它是一个 http 响应对象,其中包含状态代码的详细信息和包含数组的单独 data.data
属性。这仍然意味着我必须拥有如果...控制器中的 else 代码,用于检查data
是数组还是 HTTP 响应。
如何将数组传回我的控制器?
典型,只要我问问题,我就会发现答案。
在if (_jobs.length === 0)
块中,我返回$http.get
而不是执行它并允许承诺返回结果。
这符合我的预期。
if (_jobs.length === 0) {
$http.get('/api/WorksOrders/GetNew').success(function(data) {
_jobs = data; // I also forgot this line, without it _jobs will always be empty and the else block will never execute
deferredJobs.resolve(data);
});
} else {
deferredJobs.resolve(_jobs);
}
相关文章:
- 将HTML表格导出到excel时,无法将数据加载到excel文件中
- 如何将本地json数据加载到Extjs数据模型中
- FancyTree JS+Backbone.JS-将数据加载到FancyTree时出现问题
- 将数据加载到使用JSON返回的表单字段时出现问题
- 将基本CSV数据加载到D3
- 如何将JSON数据加载到Jqgrid中
- 点击事件时将新的JSON数据加载到Angular中
- 如何使用输入数据加载新的extjs图表
- 读取外部local.txt文件以将数据加载到数组中
- 将数据加载到地图上的更好解决方案
- 将谷歌地理编码(从url)数据加载到javascript变量中
- 按钮在第一次成功的 ajax 数据加载后不起作用
- Jquery 工具提示未随 AJAX 数据加载一起显示
- 将 json 数据加载到 CycleJS 应用程序中
- 将图像数据加载到Angularjs中
- 页面加载前的Angular JS数据加载
- 将数据加载到存储后,Extjs组合框为空
- 将从服务器获取的数据加载到输入文本表单中
- 从 txt 加载数组,将数据加载到 html 中
- 如何将PostgreSQL数据加载到HTML/JS中