无法访问嵌套的Json数据
问题描述:
code on plunkr所以我的任务是显示一个特定的市场列表,我的目标是在选项中选择一个市场名称,以便查看其详细信息。另外,如果这个市场有任何其他的子市场,我也可以查看它们。我使用angularjs进行编码,使用嵌套的json数据并使用ui-router在不同的状态中导航(如果第一个状态显示主要市场,下一个将显示其详细信息或其子市场)。第一个州很好。但我无法找到正确的逻辑来显示下一个状态的适当数据。下面是我做了什么:无法访问嵌套的Json数据
app.controller('mktctrl', function($scope,$state){
$scope.mrData={
"supermkt":[
{ "id":10,
"name":"val1",
"submkt":[
{ "sid":101,
"sname":"val1.1",
... ,
"submkt":[
{ "sid":1011,
"sname":"val1.1.1",
...
},
{ "sid":1012,
"sname":"val1.1.2",
...
}
]
},
{ "sid":102,
"sname":"val1.2",
...
}
],
"supermkt":[
{ "id":103,
"name":"val1.3",
"submkt":[
{....}
]
}
]
},
{ "id":11,
"name":"val2",
....
}
]
};
$scope.mktname=[];/*stores main top level market*/
angular.forEach($scope.mrData.supermkt,function(mar){
$scope.mktname.push(mar);
});
});
/*现在是什么出现在第一状态就像是
VAL1列表,
VAL2 ..
我想是时候,我点击其中一个(我用ui-sref)说“val1”,我把它带到另一个只显示“val1”下的“submkt”或“supermkt”的细节或名称等等。我尝试这样做:
for(var i=0;i<$scope.mktname.length;i++)
{
for(var j=0;j<$scope.mktname[i].submkt.length<0;j++)
$scope.submktname.push($scope.mktname[i].submkt[j]);
}
上面显示的错误:“未定义不是一个对象(评估十)”(我怎么想正确地访问这些子阵列) 此外,当我写了这个代码,即使第一状态不会显示,我的应用程序页面是完全空白的。 因为我也认为上述逻辑会遍历mktname数组中的所有对象,并可能将所有(val1,val2,..)的“submkt”细节存储在submktname中,所以我无法弄清楚适当的逻辑。一些帮助详细解释会有很大帮助。谢谢。
答
我选中了json,并非所有的子节点都是数组类型。例如$scope.mktname[1]
是对象类型而不是数组。
所以,你必须检查的节点是否是对象类型,然后再在LOP迭代像下面,更新了snippest
var app = angular.module('myApp', []);
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
$scope.mrData = {
"supermkt": [{
"id": 10,
"name": "val1",
"submkt": [{
"sid": 101,
"sname": "val1.1",
"submkt": [{
"sid": 1011,
"sname": "val1.1.1",
}, {
"sid": 1012,
"sname": "val1.1.2",
}]
}, {
"sid": 102,
"sname": "val1.2",
}],
"supermkt": [{
"id": 103,
"name": "val1.3",
"submkt": [{
"sid": 1011,
"sname": "val1.1.1",
}, {
"sid": 1012,
"sname": "val1.1.2",
}]
}]
}, {
"id": 11,
"name": "val2",
}]
};
$scope.mktname = []; /*stores main top level market*/
$scope.submktname = [];
angular.forEach($scope.mrData.supermkt, function(mar) {
$scope.mktname.push(mar);
});
for (var i = 0; i < $scope.mktname.length; i++) {
console.log($scope.mktname[i]);
console.log(Object.prototype.toString.call($scope.mktname[i].submkt));
if (Object.prototype.toString.call($scope.mktname[i].submkt) === '[object Array]') {
for (var j = 0; j < $scope.mktname[i].submkt.length ; j++) {
$scope.submktname.push($scope.mktname[i].submkt[j]);
}
}
}
});
<script src="https://code.angularjs.org/1.4.9/angular.js" ></script>
<body ng-app="myApp" ng-controller="MainCtrl">
<p> {{submktname | json}}!</p>
</body>
现在没有错误。但是不会显示任何数据。我在哪里可以看到我的数据是否已经存储。 – ken
添加了snippest帮助,内部也存在问题for循环条件以及 –
我的问题仍然没有解决。正如我所说的,这段代码只访问submkt细节,而不是“supermkt”细节,它也是val1下子细节的一部分。此外,它还将所有超级市场的细节(val1,val2)放在一起,并将它们放在submktname中。我无法找到确切的逻辑。 – ken