角度循环通过对象数组

时间:2015-05-16 15:40:44

标签: javascript arrays angularjs

我有以下函数在models内创建了一个对象数组,但是当我在应用程序中进一步使用models时,我无法遍历它#s提取数据的内容。

到目前为止我尝试过的包含单个console.log()消息的每个循环方法只会在models包含两个<<1>}时打印出消息一次消息/ strong>对象所以我认为问题实际上在于models的创建。如果我创建一个承诺并在完成处理后打印出models.devices的值,则返回一个空数组。

有什么想法吗?

var d = devices.split(','),
    count = 0,
    models = {devices:[]};

angular.forEach(d, function (device, i) {

    var index = i;

    if (index <= 1) {

        var deviceName = device.replace(/ /g,"+").toLowerCase(),
            req = '?__url_path_param=' + deviceName;

        $http
            .get('/api/cheapest_by_name' + req)
            .success(function (obj) {
                models.devices.push(obj.device);
                count++;
            });

    }

});

$q.all(models).then(function (data) {
    apiDeal.multi(data, 3, 2);
});

然后......(在api-deal.factory.js中)

function apiDeal($http, $rootScope) {

    return {

        multi: function (devices, limit, type) {

            console.log(devices); // equal to below image
            console.log(devices.devices); // equal to '[]'

        }

    }

}

console.log(devices)

然后我需要在devices

中循环浏览apiDeal.multi

1 个答案:

答案 0 :(得分:2)

您需要保留一系列承诺,这些承诺应使用models取代您$q.all。它必须是一系列承诺。

所以将代码更改为:

var d = devices.split(','),
    count = 0,
    models = {devices:[]},
    promises = [];

var promise = $http
            .get('/api/cheapest_by_name' + req)
            .success(function (obj) {
                models.devices.push(obj.device);
                count++;
            });

promises.push(promise);

然后,做:

$q.all(promises).then(function (data) {
    apiDeal.multi(data, 3, 2);
});

Simple Fiddle demonstration