code on plunkr 所以我的任务是显示一定的市场列表,我的目标是在选项中选择一个市场名称,以便查看其详细信息。此外,如果市场有任何其他子市场,我也可以查看它们。我使用angularjs进行编码,使用嵌套的json数据并使用ui-router导航到不同的状态(如果第一个状态显示主要市场,则下一个将显示其详细信息或其子市场)。第一个状态就好了。但我无法找到正确的逻辑来显示下一个状态的适当数据。这就是我所做的:
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"时,我被带到另一个状态,只显示"的详细信息或名称。 submkt"或" supermkt"在" val1"等等。我试过这个:
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]);
}
以上显示错误:&#34;未定义不是对象(评估j)&#34; (我怎么想正确访问这些子阵列) 此外,当我编写此代码时,即使第一个状态也不会显示,我的应用页面也完全空白。 因为我还认为上面的逻辑将遍历mktname数组中的所有对象,并且可能存储&#34; submkt&#34; submktname中所有(val1,val2,..)的详细信息,我无法找出合适的逻辑。一些帮助详细解释会有很大帮助。谢谢。
答案 0 :(得分:0)
我检查了json,并非所有子节点都是类型数组。例如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]);
}
}
}
});
是object类型而不是数组。
所以你必须首先检查节点是否为object类型,然后如下所示迭代lop,更新为snippest
<script src="https://code.angularjs.org/1.4.9/angular.js" ></script>
<body ng-app="myApp" ng-controller="MainCtrl">
<p> {{submktname | json}}!</p>
</body>
{{1}}