到目前为止,我在Rails应用程序中设置AngularJS模型并将数据提供给前端访问时没有任何问题。我甚至将其设置为使用$http
填充来自AJAX请求的数据。但是,我需要此模型来包含多个$http
调用的数据。这是我到目前为止的代码:
function DropboxCtrl($scope, $http) {
var $infiniteLoader = $(".infiniteLoader");
var theUIDS = $infiniteLoader.attr('data-dropbox-uids').split(',');
if($infiniteLoader.attr('data-dropbox-uids') != "") {
var theData = {};
$.each(theUIDS, function(key) {
$http({ url: '/dropbox/files/get', method: 'GET', params: { uid: theUIDS[key] }}).success(function(data) {
theData = data;
});
});
$scope.dropboxes = theData;
}
}
我有一个名为DropboxCtrl
的方法,它将首先获取我需要调用GET请求的所有UID。我遍历其中的每一个,然后将data
附加到theData
这是一个Javascript对象。在每个之后,我使我的dropboxes模型等于theData
的值。目前我的方法完全没有返回,也没有Javascript错误。我很肯定我的url完全正常工作,实际上确实让代码只使用了一个AJAX请求:
$.each(theUIDS, function(key) {
$http({ url: '/dropbox/files/get', method: 'GET', params: { uid: theUIDS[key] }}).success(function(data) {
$scope.dropboxes = data;
});
});
然而......代码块只返回最后一次AJAX调用,因为其他代码块被覆盖。也许我所缺少的只是不正确的Javascript,但是,也许我所缺少的只是缺乏对“角度方式”的理解。我擅长Javascript和jQuery,但对Angular很新。有什么帮助吗?
答案 0 :(得分:3)
AngularJs是一个高级Javascript框架。代码最终是javascript。在$ each中,您可以将结果推送到数组或初始化的集合,如
$scope.dropboxes = [{uid:1234}, {uid:2345}] and so on.
<$>在$ each中,找到uid的记录并附上结果。
我通常使用underscorejs库来处理集合,数组等。
像这样的东西
_.findWhere($scope.dropboxes, {uid: data.uid }).data = data;
假设返回的数据中包含uid。如果没有,那么应该有另一种方法将结果映射到请求。请注意,无法保证响应顺序,因此您无法使用数组索引来映射结果。