2016-02-28 143 views
0

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中,所以我無法弄清楚適當的邏輯。一些幫助詳細解釋會有很大幫助。謝謝。

回答

0

我選中了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>

+0

現在沒有錯誤。但是不會顯示任何數據。我在哪裏可以看到我的數據是否已經存儲。 – ken

+0

添加了snippest幫助,內部也存在問題for循環條件以及 –

+0

我的問題仍然沒有解決。正如我所說的,這段代碼只訪問submkt細節,而不是「supermkt」細節,它也是val1下子細節的一部分。此外,它還將所有超級市場的​​細節(val1,val2)放在一起,並將它們放在submktname中。我無法找到確切的邏輯。 – ken