在控制器实例化之前 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