即使我刚刚定义它,角度控制器阵列也是空的

时间:2015-07-11 18:49:31

标签: javascript arrays angularjs

以下是角度控制器中的功能。 " alert(coffee.brand)",或者阵列的任何其他部分,打印" undefined,"这显然不是。奇怪的部分是,undefined在for循环中打印正确的次数,因此它知道数组已填充,它似乎无法读取数据。想法?提前谢谢!

$scope.activate = function(id){


            $scope.coffees =
    [
    {'id': 1,
    'brand': 'Folgers',
    'name': 'Regular',
    'country': 'America',
    'reviews': [
            {'rating': 3,
            'comment': "gross",
            'reviewer': "James"
            }
    ]
    },
    {'id': 2,
    'brand': 'Starbucks',
    'name': 'Mocha',
    'country': 'America',
    'reviews': [
    {'rating': 7,
    'comment': 'insane!',
    'reviewer': 'Bob'
    },
    {'rating': 5,
    'comment': 'solid...',
    'reviewer': 'Joe'
    }
    ]
    }
    ];

            for (coffee in $scope.coffees){                       

                    alert (coffee.brand);
                    if (coffee.id == id){
                            $scope.currCoffee = coffee;
                            alert("here")
                            alert ($scope.currCoffee.id);
                    }
            }

    };

3 个答案:

答案 0 :(得分:1)

您正在错误地使用 $('.varquantity').on('focus', selectAllOnFocus); 循环。它不会迭代数组中的元素,而是迭代对象的属性名称。在您的情况下,当您使用隐式数字索引数组时,最好使用普通的for in循环,如下所示:

for

有关for (var i = 0; i < $scope.coffees.length; i++) { var coffee = $scope.coffees[i]; alert (coffee.brand); if (coffee.id == id){ $scope.currCoffee = coffee; alert("here") alert ($scope.currCoffee.id); } } 循环的详细信息,请参阅MDN上的文档。

答案 1 :(得分:0)

您应该将for循环更新为

for (var i = 0; i < $scope.coffees.length; i++) {

并检索

之类的值
alert($scope.coffees[i].brand);

供参考 - http://plnkr.co/edit/bmuJmJO94mEzGuB3uF0K?p=preview

答案 2 :(得分:-1)

咖啡不是对象本身的关键,所以就像$ scope.coffees [coffee]。

了解更多信息

  • for...in循环

    它迭代可枚举的自有和可枚举的继承属性。