1

オブジェクトの配列からテーブルを作成する必要がありますが、テーブルをハードコードしたくありません。例えばthisthisはできません。私はむしろthisのようなネストされたng-repeatsを必要とします。しかし、配列に2つの値を含む列があるので、私の場合は少し異なります。AngularJS:テーブルの行/列にng-repeatのテーブル

[ 
    { 
     "foo":"bar",..., 
     "key1":[ 
     "value1", 
     "value2" 
     ], 
     "key2":[ 
     "value1", 
     "value2" 
     ],..., 
     "more_foo":"more_bar" 
    },... 
] 

私は、各キーは、列名である必要があり、表の行の配列から(常に同じ構造を持っている)すべてのオブジェクトの(常に文字列である)の値をしたい:データは次のようになります。

ここ

table, 
 
th, 
 
td { 
 
    border: 1px solid black; 
 
    text-align: center; 
 
    border-spacing: 0; 
 
} 
 

 
td, 
 
th { 
 
    padding: 0.5em; 
 
}
<table> 
 
    <thead> 
 
    <tr> 
 
     <th>foo</th> 
 
     <th colspan="2">key1</th> 
 
     <th colspan="2">key2</th> 
 
     <th>more_foo</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody> 
 
    <tr> 
 
     <td>bar</td> 
 
     <td>value1</td> 
 
     <td>value2</td> 
 
     <td>value1</td> 
 
     <td>value2</td> 
 
     <td>more_bar</td> 
 
    </tr> 
 
    </tbody> 
 
</table>

は私が出ているものです:このように、この値は配列とfalseの場合、それがない場合は

<table> 
    <thead> 
    <tr> 
     <th ng-repeat="(propName, prop) in myArray[0]" 
      colspan="{{isUpdateable(propName) ? 2 : undefined}}"> {{propName}} 
     </th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr ng-repeat="object in myArray | filter: searchFilter"> 
     <td ng-repeat="(propName, prop) in object" double-col>{{prop}}</td> 
    </tr> 
    </tbody> 
</table> 

isUpdatable(propName) trueを返します。これにより、この列に2つのtdがあることが可能になります。

ダブルCOLディレクティブ:

app.directive('double-col', function() { 
    return { 
     transclude: true, 
     template: "<td>{{prop[0]}}</td><td class=\"changedProp\">{{prop[1]}}</td>" 
    }; 
}); 

が、私はこのディレクティブがあれば2つのtd sの既存のtdを交換するとpropが配列され、そうでなければpropを表示するために何もしない場合にのみ必要(上記tdを参照してください) 。

あなたはhttps://stackoverflow.com(人々はまだうまく動作しないものを投稿する場所)にいるので、おそらく私の現在のコードがうまくいっていないと推測できます。私はangularJSも新しく、基本的にカスタムディレクティブ(おそらく他のほとんどのものも)を理解していないので、誰かがこの問題を手伝って説明することができればうれしいです。

答えて

1

<tr ng-repeat="object in myArray | filter: searchFilter"> 
     <td ng-repeat="(propName, prop) in object" colspan="{{isArray(prop) ? prop.length : 1}}"> 
     <span ng-if="!isArray(prop)"> {{prop}}</span> 
     <table ng-if="isArray(prop)"><tr> 
    <td ng-repeat="prop1 in prop"> 
     {{prop1}} 
    </td> 
    </tr></table> 
     </td> 

    </tr> 

$scope.isArray=function(prop){ 
return Array.isArray(prop); 
} 

について

Here is working fiddle

関連する問題