【问题标题】:cannot set property of undefined angular js无法设置未定义角度 js 的属性
【发布时间】:2015-04-15 22:14:04
【问题描述】:

我有一个 json 对象列表、$scope.phones 和一个充满 json 文件的文件夹,其中包含有关每部手机的附加数据。我正在尝试遍历文件以获取更多信息以放入我的列表中关于每部手机:

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 之后才会运行,(我意识到它有点 hack 但它不会引起问题。)我得到一个错误 cannot set property of undefined on:

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

如果我尝试在 .get 方法之外访问这个没有问题,但是在 get 方法之外不存在新的 weight 值。

【问题讨论】:

  • 这里有一些问题,首先你应该看看在手机加载之前不会更新手机的承诺,因为加载手机可能需要超过 1 秒的时间.此外,当Phone.get 解析时,我将永远是$scope.phones.length,您需要检查闭包以解决该问题:stackoverflow.com/questions/750486/…

标签: javascript json angularjs asynchronous web


【解决方案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;           
    });
  }
}

【讨论】:

    猜你喜欢
    • 2019-07-04
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多