2014-04-15 41 views
0

我有動態內容的對象,例如:我如何能顯示動態「嵌套」與NG-重複對象

$scope.test = [ 
{ 
    "name" : "device1", 
    "params" : [{"freq1" : "144"},{"freq2" : "160"}] 

}, 
{ 
    "name" : "device2", 
    "params" : [{"freq3" : "144"}] 

}] 

我用NG-重複展示的內容:

<li ng-repeat="(key,value) in test">{{key}}:{{value}}<li> 

但是我怎樣才能使用params的關鍵值?

<li ng-repeat="(k,v) in test.params">{{k}}:{{v}}<li> 

不工作:-(

http://jsfiddle.net/nofear87/kyGa3/1/

編輯:

$scope.test = [ 
{ 
    "name" : "device1", 
    "params" : [{"freq1" : "144"},{"freq2" : "160"}], 
    "category" : "test-category" 

}, 
{ 
    "name" : "device2", 
    "params" : [{"freq3" : "144"}], 
    "vendor" : "intel" 

}] 

回答

2

你將需要添加的ng-repeat另一個層次遍歷顯示test.params「個別鍵和值 - 這裏是你的小提琴的修改版本:

<ul> 
    <li ng-repeat="(key, value) in test"> 
     {{value.name}} 
     <ul ng-repeat="(k, v) in value.params"> 
      <li ng-repeat="(paramKey, paramVal) in v">{{paramKey}} -&gt; {{paramVal}}</li> 
     </ul> 
    </li> 
<ul> 

這將輸出:

  • DEVICE1
    • FREQ1 - > 144
    • 頻率2 - > 160
  • 設備2
    • FREQ3 - > 144

同時請注意,您的提琴缺少方括號把$scope.test成陣列

+0

謝謝!有沒有辦法自動瀏覽孔陣列/對象?因爲我不知道鑰匙,他們是動態的...請參閱啓動帖子。 http://jsfiddle.net/nofear87/kyGa3/4/ – nofear87

+0

這裏是一個例子,希望你能理解我:-) http://jsfiddle.net/nofear87/kyGa3/5/ – nofear87

+0

啊我看到了,不是很完美對我來說,從你的第一個例子中顯而易見:) - 試試這個:http://jsfiddle.net/D9MAB/ 請注意,我將angularjs的版本提升到1.2以使用ng-if(你可以用ng-show '儘管如此。 爲了檢查是否需要遍歷一個值,我們添加一個'$ scope。isArray'方法到控制器 –

0

像這樣的事情

http://jsfiddle.net/kyGa3/2/

<body ng-app="app" ng-controller="projects"> 

<table class="table"> 
    <tbody> 
     <tr ng-repeat="(key, value) in device"> 
      <td><strong>{{key}}</strong></td> 
      <td>{{value}}</td> 
     </tr> 
     <div ng-repeat="item in device.params"> 
      <div ng-repeat="(k, v) in item"> 
       <strong>{{ k }}</strong> 
       {{ v }} 
      </div> 
     </div> 
    </tbody> 
</table> 

</body> 

device.params是陣列...

+0

謝謝!我怎樣才能將它們嵌入參數鍵中? – nofear87

1

從模板調用函數。
HTML:

<tr ng-repeat="(key, value) in device"> 
    <td><strong>{{key}}</strong></td> 
    <td>{{val(value)}}</td> 
</tr> 

JS

$scope.val = function(value) { 
     if(typeof value == 'string') {return value} 
     else if(typeof value == "object") { 
      var values=""; 
      value.forEach(function(val,index){ 

       if(val.name) {values+=val.name} 
       else if(val.freq) {values+=val.freq+", "} 
       else if(val.maxFreq) {values+=val.maxFreq+", "} 
      }); 
      return values; 
    } 
} 
+0

謝謝,那就是我正在尋找的。有沒有辦法在不知道名稱的情況下添加它們(maxFreq,freq,...) – nofear87

+0

這是個好主意。看我的[小提琴](http://jsfiddle.net/vusan/5JnM7/1/) – vusan