如何将更多数据附加到AngularJS模型?

时间:2013-04-15 19:48:51

标签: javascript jquery ruby-on-rails angularjs

到目前为止,我在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很新。有什么帮助吗?

1 个答案:

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