在实例化Controller之前,未解析JSON对象

时间:2017-01-31 11:10:34

标签: javascript angularjs arrays json ionic-framework

我正在使用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":[]
}

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

然而,我收到错误:

  

TypeError:无法读取未定义的属性“length”

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

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

$scope.theObject = theObject;

由于

2 个答案:

答案 0 :(得分:1)

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

在控制器内进行Web调用
factory.theObject().get().$promise.then(function (response{
   $scope.theObject = response;
}

答案 1 :(得分:0)

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

enter image description here

试试这个:

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>