我正在使用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;
由于
答案 0 :(得分:1)
好的,我已经解决了这个问题。 Resolve在实例化控制器之前返回对象的承诺。但是,在将来自Web调用的对象数据放入该promise对象之前,实例化控制器。因此解决方案是使用此行
在控制器内进行Web调用factory.theObject().get().$promise.then(function (response{
$scope.theObject = response;
}
答案 1 :(得分:0)
您收到以下错误,因为您没有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>