无法访问嵌套的Json数据

时间:2016-02-28 14:23:39

标签: angularjs json

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,..)的详细信息,我无法找出合适的逻辑。一些帮助详细解释会有很大帮助。谢谢。

1 个答案:

答案 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}}