2015-04-15 2 views
3

У меня есть список объектов json, $ scope.phones и папка, полная json-файлов, с дополнительными данными о каждом телефоне. Я пытаюсь перебирать файлы, чтобы захватить дополнительную информацию, чтобы поместить в мой список по каждому телефону:не может установить свойство неопределенного углового js

phonecatControllers.controller('PhoneListCtrl', ['$scope', 'Phone', 
function($scope, Phone) { 
$scope.phones = Phone.query(); 

var myTimer = window.setTimeout(function() { 

    for (var i = 0; i < $scope.phones.length; i++){ 
     var weight = 0;    
     Phone.get({phoneId: $scope.phones[i].id}, function(phone) { 
      weight = phone.sizeAndWeight.weight; 
      $scope.phones[i].weight = weight;   
     });  
    }; 
} , 1000); 

$scope.orderProp = 'age'; 
}]); 

Таймер так, что функция не работает до тех пор, после того, как scope.phones установлен, (я не понимаю, . его немного рубить, но его не вызывают проблем), я получаю сообщение об ошибке не может установить свойство неопределенных на:

$scope.phones[i].weight = weight; 

Если я пытаюсь открыть вне метода .get есть не проблема, однако новое значение веса не существует вне метода get.

+3

Есть несколько вопросов, здесь происходит, во-первых, вы должны смотреть на обещания не обновлять телефоны, пока не будут загружены телефоны, так как есть возможно, для загрузки телефонов может потребоваться больше 1 секунды. Кроме того, когда 'Phone.get' разрешается, я всегда буду' $ scope.phones.length', вы захотите проверить закрытие, чтобы исправить это: http://stackoverflow.com/questions/750486/javascript-closure-inside -loops-простой практический пример, – HJ05

ответ

1

ждать списка телефонов перед циклом через них:

Phone.query().then(function(phones){ 
    for(var i=0; i<phones.length; i++){ 
    var weight = 0;    
    Phone.get({phoneId: phones[i].id}, function(phoneDetails) { 
     weight = phoneDetails.sizeAndWeight.weight; 
     phones[i].weight = weight;   
    }); 
    } 
} 
Смежные вопросы