2015-11-18 3 views
0

У меня возникли проблемы с доступом к элементу, его на последнем листе дерева ресурсов. Однако у меня возникают проблемы с итерацией элементов через итератор. Я хотел бы получить type.id каждого значения, которое у меня есть в массиве $ scope.values. Все они имеют свойство 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: Невозможно установить свойство «тип» неопределенной

Линии и грести ошибки помещает курсор: $ scope.values ​​[ i] .type = результаты; Тем не менее, я могу записать результаты в порядке и свой массив ресурсов с двумя элементами в нем.

Два более стандартных метода доступа к элементам работают отлично, если я меняю их в обоих местах.

$scope.values[0] 

или

$scope.values["0"] 

Что я здесь отсутствует?

+0

Что такое 'getType'? – tymeJV

+0

, если вы предоставили правильное сообщение об ошибке, тогда ошибка не с '$ scope.values ​​[i] .type.id' где-то еще вы пытаетесь присвоить свойство _type_ для объекта, который является _undefined_ – Grundy

+0

Его служба в angularJS для получения объектов из бэкэнд через HTTP. – hardcore

ответ

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; 
 
    }); 
 
}

+0

Вы правы, когда выведенный из строя индекс дает 2 при первом запуске, а длина равно 2, поэтому оно должно быть 0, а затем 1. Как ни странно, это не так, когда я выходил из системы, поскольку я изначально его использовал в вопрос. – hardcore

Смежные вопросы