Javascript 在实例化控制器之前,未解析JSON对象
我使用Ionic创建了一个应用程序,在控制器中,我得到了一个从app.js解析的对象。此对象具有多个属性,包括如下所示的数组:Javascript 在实例化控制器之前,未解析JSON对象,javascript,angularjs,arrays,json,ionic-framework,Javascript,Angularjs,Arrays,Json,Ionic Framework,我使用Ionic创建了一个应用程序,在控制器中,我得到了一个从app.js解析的对象。此对象具有多个属性,包括如下所示的数组: { "objectId":"id", "objectName":"name", "anArray":[{ "id":"id1", "name":"name1", "description":"Medium Rare", "photographUrl":"/image1" },
{
"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中访问。事实上,我无法访问控制器中对象的任何属性,似乎控制器是在app.js中使用“resolve”解析对象之前实例化的,然而,我的印象是,这不应该发生,数据应该在控制器实例化之前解析
在控制器中,我使用以下内容:
$scope.theObject = theObject;
谢谢因为您没有
JSON
,所以您得到了下面的错误信息。您有一个数组:[]
试试这个:
var myApp=angular.module('myApp',[]);
myApp.controller('MyCtrl',函数($scope){
变量对象=[{
“objectId”:“id”,
“objectName”:“name”,
“混乱”:[{
“id”:“id1”,
“名称”:“名称1”,
“说明”:“中稀”,
“照片”:“/image1”
}, {
“id”:“id2”,
“名称”:“名称2”,
“描述”:“美味的黑麦面包上的烤豆”,
“照片”:“/image2”
}],
“空数组”:[]
}];
$scope.theObject=theObject;
var arr=$scope.theObject[0]。数组;
对于(变量i=0;i
好的,我已经解决了这个问题。Resolve在实例化控制器之前返回对象的承诺。但是,在将web调用中的对象数据放入promise对象之前,将实例化控制器。因此,解决方案是使用这条线路在控制器内部进行web调用
factory.theObject().get().$promise.then(function (response{
$scope.theObject = response;
}
您可以执行console.log($scope.theObject)吗?只返回[object object],我们可以获得关于$scope.theObject的更多信息吗?它来自哪里?console.log(JSON.stringify($scope.theObject))。。检查对象的结构。查看键是否存在。JSON.stringify()返回{}。该键确实存在,并使用ng repeat=“(键,值)在HTML中工作在Object.anArray中,对象来自web请求,即对$resource的查询。从网络活动中可以看出,返回的对象是正确的。很抱歉,这不起作用,我遇到了以下错误:TypeError:无法将未定义或null转换为对象。传递的对象不是数组,而是一个将数组作为正确数组的对象正在传递的对象来自Rest控制器,因此我无法更改它