我无法访问元素,它位于资源树的最后一片叶子上。我无法通过迭代器迭代元素。我想得到$ scope.values数组中每个值的type.id.他们都有一个type.id属性。
有问题的罪犯:
for (var i=0; i < $scope.values.length; i++) {
Type.getType({id:$scope.values[i].type.id}, function (results) {
$scope.values[i].type = results;
return results;
});
}
给出: TypeError:无法设置未定义的属性“type”
错误的行和行将光标放到:$ scope.values [i] .type = results;但是我可以将结果记录得很好,它的资源数组中包含2个项目。
如果我在两个地方更改它们,那么另外两种访问元素的标准方法也可以正常工作。
$scope.values[0]
或
$scope.values["0"]
我在这里缺少什么?
答案 0 :(得分:1)
你不知道Type.getType做了什么,所以我不知道你作为第二个参数应用的函数何时被调用,也许它是一个回调?但我很确定,当调用此函数时,i的值不是您想要的值。这不是一个闭包,我似乎在全球范围内。
你可以这样试试:
for (var i=0; i < $scope.values.length; i++) {
Type.getType({id:$scope.values[i].type.id}, function (results) {
var index = i;
$scope.values[index].type = results;
return results;
});
}