2016-01-22 112 views
4

我要渲染動態標題的表,我的意思是,我不想做這樣的事情在HTML渲染表動態標題

<table> 
     <tr> 
      // THIS TABLE ROW IS WHAT I SAY 
      <th>here info</th> 
      <th>something here</th> 
      <th>another header</th> 
     </tr> 
     <tr ng-repeat="thing in things"> 
      <td>{{thing.asfs}}</td> 
      <td>{{thing.asx}}</td> 
      <td>{{person.dsf}}</td> 
     </tr> 
    </table> 

我想是這樣的

<table> 
    <tr ng-repeat="head in heads"> 
     {{head}} 
    </tr> 
    <tr ng-repeat="bar in bars"> 
     <td ng-repeat="foo in foos"></td> 
    </tr> 
</table> 

,這只是一個例子,我需要這個數據來做到這一點:

{ 
    "55f6de98f0a50c25f7be4db0":{ 
     "clicks":{ 
     "total":144, 
     "real":1 
     }, 
     "conversions":{ 
     "total":4, 
     "amount":229 
     }, 
     "cost":{ 
     "cpc":0.1999999999999995, 
     "ecpc":1145.0000000000027, 
     "total":28.79999999999993 
     }, 
     "revenue":{ 
     "total":4, 
     "epc":0.027777777777777776 
     }, 
     "net":{ 
     "roi":-1.1612903225806457, 
     "total":4 
     }, 
    "name":"Traffic Source #2", 
    },  
    "55f6de98f0a50c25f7be4dbOTHER":{ 
     "clicks":{ 
     "total":144, 
     "real":1 
     }, 
     "conversions":{ 
     "total":4, 
     "amount":229 
     }, 
     "cost":{ 
     "cpc":0.1999999999999995, 
     "ecpc":1145.0000000000027, 
     "total":28.79999999999993 
     }, 
     "revenue":{ 
     "total":4, 
     "epc":0.027777777777777776 
     }, 
     "net":{ 
     "roi":-1.1612903225806457, 
     "total":4 
     } 
    "name":"Traffic Source #3" 
    }, 

} 

每一個關鍵,例如點擊次數,轉換成本,E tc,應該是td,這只是我不想要靜態HTML。

有什麼建議嗎?

編輯

,並且有時該對象將增長,能想出這樣一個55f6de98f0a50c25f7be4db0

一些鍵我沒有這個撥弄着完全相同的數據我收到

http://jsfiddle.net/wLkz45qj/

+2

執行'$ scope.peopleKeys = Object.keys(people);',然後' {{personKey}}'。 – jperezov

+0

@jperezov但我如何適應我收到的數據?因爲實際上,你應該看到我正在接收一個對象,而不是一個數組。 – TheUnnamed

+0

因此,您具有不同的具有不同尺寸的對象,您如何對它們進行成像以適合一個表格? – vittore

回答

0

更新: 你需要做的是首先將你不方便的對象轉換爲對象數組wi TH結構簡單,然後用我的代碼,即

{ 
a: { 
    b:{ 
    c: 'x' 
    } 
} 
} 

會變成

[[ a, { 'b.c' : 'x' }], ...] 

或只是

[{ _id : a , 'b.c' :'x'}, ...] 

最簡單的方式做到這一點是使用lodash或下劃線(檢查地圖,flatMap,對等)

@jperezov向你展示了核心思想,稍微詳細的例子:

$scope.peopleKeys = Object.keys(people[0]) 

<table> 
    <tr> 
    <th></th> 
    <th ng-repeat="personKey in peopleKeys"> 
     {{ personKey }} 
    </th> 
    </tr> 

    <tr ng-repeat='p in people'> 
     <th>{{ $index }}</th> 
     <td ng-repeat="personKey in peopleKeys"> 
     {{ p[personKey] }} 
     </td> 
    </tr> 

</table> 

您可能也有一些字典,顯示名稱:

$scope.displayNames = { 
    id: 'ID', 
    firstName: 'First Name' 

...

} 

,然後你的頭將是:

<tr> 
    <th></th> 
    <th ng-repeat="personKey in peopleKeys"> 
     {{ displayNames[personKey] }} 
    </th> 
    </tr> 

PS:或者你可以使用ui-grid

+0

我明白了這一點,但在例子中的人是來自一個數組,在這種情況下,我收到一個對象,我應該考慮到這一點。 – TheUnnamed

+0

@TheUnnamed你可以展示你在問題中收到的數據的詳細例子嗎? – vittore

+0

我上面粘貼的數據是完整的數據。這就是我所收到的全部 – TheUnnamed

0
var app = angular.module('myApp', []); 

function PeopleCtrl($scope, $http) { 
     $scope.headers=[]; 
    $scope.data = []; 
    $scope.LoadMyJson = function() { 
      for (var s in myJson){ 
      $scope.data.push(s); 
      if ($scope.headers.length < 1) 
       for (var prop in myJson[s]){ 
       prop.data = []; 
       $scope.headers.push({th:prop, td: []}); 
       } 
      } 
      for (var s in $scope.data){ 
      for (var prop in $scope.headers){ 
       var header = $scope.headers[prop].th; 
        var data = myJson[$scope.data[s]][header]; 
        $scope.headers[prop].td.push(data); 
      } 
      } 
    }; 

} 

你在找什麼是這樣的事情,我想: http://jsfiddle.net/wLkz45qj/8/

也許迭代另一次在 「內部」 爲格式。

+0

以及如何在html中渲染它? '

{{inner}}
',應怎樣使用代替{{內?}} – TheUnnamed

+0

使用'<跨度納克重複='(丙,VAL)在inner'> {{prop}}:{{val}}':參見http://jsfiddle.net/mgayxjtp/ – christian