0

到目前为止,我在我的 Rails 应用程序中设置 AngularJS 模型并为其提供数据以在前端访问都没有问题。我什至将其设置为使用来自 AJAX 请求的数据填充$http。但是,我需要这个模型来包含多个$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。我遍历它们中的每一个,然后附加datatheData哪个是 Javascript 对象。在每个之后,我使我的保管箱模型等于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,但是,也许我缺少的只是缺乏对事物的“Angular 方式”的理解。我精通 Javascript 和 jQuery,但对 Angular 很陌生。有什么帮助吗?

4

1 回答 1

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。如果没有,那么应该有另一种方法将结果映射到请求。请注意,无法保证响应的顺序,因此您不能使用数组索引来映射结果。

于 2013-04-15T20:06:51.263 回答