开发者问题收集

在控制器实例化之前 JSON 对象未解析

2017-01-31
68

我正在使用 Ionic 创建一个应用程序,在控制器中,我得到了一个从 app.js 解析的对象。此对象有几个属性,包括一个数组,如下所示:

{
    "objectId":"id",
    "objectName":"name",
    "anArray":[{
        "id":"id1",
        "name":"name1",
        "description":"Medium Rare",
        "photographUrl":"/image1"
    }, {
        "id":"id2",
        "name":"name2",
        "description":"Baked Beans on Scrumptious Dark Rye Bread",
        "photographUrl":"/image2"
    }],
    "emptyArray":[]
}

但是,问题是,我可以使用 theObject.anArray 中的 (key, value) 遍历 html 中数组中的每个项目,但在控制器中,我试图在 for 循环中遍历数组 for (var i = 0; i < $scope.theObject.anArray.length; i++) {...

但是,我收到一个错误:

TypeError: Cannot read property 'length' of undefined

有人能帮我找出为什么我无法在控制器中访问这个数组,但我可以在 html 中访问。实际上,我无法访问控制器中对象的任何属性,看起来好像控制器是在使用“resolve”在 app.js 中解析对象之前实例化的,但是,我的印象是这不应该发生,数据应该在控制器实例化之前解析

P.S. 在控制器中我使用这个:

$scope.theObject = theObject;

谢谢

2个回答

好的,我解决了这个问题。在实例化控制器之前,Resolve 会为对象返回一个承诺。但是,在将来自 Web 调用的对象数据放入该承诺对象之前,控制器已实例化。因此,解决方案是使用此行在控制器内部进行 Web 调用

factory.theObject().get().$promise.then(function (response{
   $scope.theObject = response;
}
Ramonster
2017-02-01

您收到以下错误是因为您没有 JSON 。您有一个数组: []

在此处输入图片描述

尝试此操作:

var myApp = angular.module('myApp',[]);

myApp.controller('MyCtrl',function($scope) {
    var theObject = [{
    "objectId":"id",
    "objectName":"name",
    "anArray":[{
        "id":"id1",
        "name":"name1",
        "description":"Medium Rare",
        "photographUrl":"/image1"
    }, {
        "id":"id2",
        "name":"name2",
        "description":"Baked Beans on Scrumptious Dark Rye Bread",
        "photographUrl":"/image2"
    }],
    "emptyArray":[]
}];
$scope.theObject = theObject;
var arr = $scope.theObject[0].anArray;
for (var i = 0; i < arr.length; i++) {
  console.log(arr[i]);
}

});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MyCtrl">
</div>
Rohìt Jíndal
2017-01-31